Wygląda na to, że urllib2 wysyła domyślnie żądanie HTTP/1.1?Jak wysłać żądanie HTTP/1.0 przez urllib2?
Odpowiedz
urllib2 używa httplib pod maską, aby nawiązać połączenie. Możesz zmienić go na http 1.0, jak pokazano poniżej. Podaję mój dziennik serwerów Apache dostępu do pokazania, w jaki sposób połączenie http mieć zmiany do 1,0
kodu
import urllib2, httplib
httplib.HTTPConnection._http_vsn = 10
httplib.HTTPConnection._http_vsn_str = 'HTTP/1.0'
print urllib2.urlopen('http://localhost/').read()
access.log
127.0.0.1 - - [01/Dec/2012:09:10:27 +0300] "GET/HTTP/1.1" 200 454 "-" "Python-urllib/2.7"
127.0.0.1 - - [01/Dec/2012:09:16:32 +0300] "GET/HTTP/1.0" 200 454 "-" "Python-urllib/2.7"
W końcu wymyśliłem, definiując mój własny handler, ale twoje rozwiązanie jest znacznie prostsze, dzięki :) – houqp
dla użytkowników python 3, httplib jest zastąpione przez http.client i cała reszta jest wciąż tak samo, jak wspaniałe rozwiązanie Marwana. –
Aby uniknąć małpa-łatanie httplib
(zmiana globalna), można podklasę HTTPConnection
zdefiniować własny program obsługi http:
#!/usr/bin/env python
try:
from httplib import HTTPConnection
from urllib2 import HTTPHandler, build_opener
except ImportError: # Python 3
from http.client import HTTPConnection
from urllib.request import HTTPHandler, build_opener
class HTTP10Connection(HTTPConnection):
_http_vsn = 10
_http_vsn_str = "HTTP/1.0"
class HTTP10Handler(HTTPHandler):
def http_open(self, req):
return self.do_open(HTTP10Connection, req)
opener = build_opener(HTTP10Handler)
print(opener.open('http://stackoverflow.com/q/13656757').read()[:100])
- 1. użyciu python urllib2 wysłać żądanie POST i uzyskać odpowiedź
- 2. Jak wysłać żądanie POST jako JSON?
- 3. Jak wysłać żądanie POST?
- 4. Jak wysłać żądanie SOAP?
- 5. Jak wysłać żądanie HTTPS przez serwer proxy w Javie?
- 6. Jak wysłać obiekt JSON przez żądanie HttpClient z systemem Android?
- 7. Jak wysłać żądanie do "j_spring_security_check" od kontrolera
- 8. Czy można wysłać żądanie POST w kolbie?
- 9. Jak wysłać żądanie asynchronicznego adresu URL?
- 10. Jak wysłać żądanie GET w AS3?
- 11. Jak wysłać żądanie Oautha z python-oauth2
- 12. Jak wysłać żądanie HTTP za pomocą Telnet
- 13. Jak wysłać żądanie SOAP w PHP
- 14. Jak wysłać żądanie POST w RestSharp?
- 15. jak wysłać żądanie http z linii poleceń
- 16. Jak wysłać żądanie PUT/DELETE w HTML?
- 17. Jak wysłać żądanie HEAD za pomocą HtmlUnit?
- 18. Jak wysłać żądanie GET z PHP?
- 19. jak wysłać żądanie delivery_sm z SMSC
- 20. Jak wysłać ponownie żądanie GWT RequestFactory
- 21. Jak wysłać żądanie do API zewnętrznym
- 22. Jak poprawnie pobierać pliki przez HTTP przez python-urllib2?
- 23. Jak wysłać ciąg przez PostMessage?
- 24. Konwersja skompresowane dane pobrane przez urllib2 HTML
- 25. Python urllib2> HTTP Proxy> HTTPS żądanie
- 26. Retrofit: Jak wysłać żądanie POST ze stałymi polami?
- 27. Wysłać żądanie SOAP, od czego zacząć?
- 28. Jak wysłać żądanie HTTPS przy użyciu funkcji Retrofit?
- 29. java.lang.reflect.MalformedParameterizedTypeException próbuje wysłać żądanie do API
- 30. Jak wysłać dane przez PendingIntent do transmisji?
Czy istnieje jakiś szczególny powód, aby używać protokołu HTTP 1.0 przez HTTP 1.1? –
Jestem również ciekawy, dlaczego potrzeba HTTP 1.0 –
Piszę skrypt testowy dla jednego z moich głupich zadań domowych, który używa tylko HTTP 1.0. (skrypt testowy nie jest częścią pracy domowej) – houqp