특정 HTTP 버전 프로토콜을 사용하여 파이썬에서 HTTP 요청을 보내는 방법이 있습니다. httplib 또는 urllib를 사용하면 HTTP 요청을 전송할 수 없습니다.특정/존재하지 않는 http 버전 프로토콜을 사용하여 HTTP 요청을 Python에서 보내십시오.
예 : GET/HTTP/6.9
감사합니다.
특정 HTTP 버전 프로토콜을 사용하여 파이썬에서 HTTP 요청을 보내는 방법이 있습니다. httplib 또는 urllib를 사용하면 HTTP 요청을 전송할 수 없습니다.특정/존재하지 않는 http 버전 프로토콜을 사용하여 HTTP 요청을 Python에서 보내십시오.
예 : GET/HTTP/6.9
감사합니다.
간단한 대답 :이 대부분의 서버에 대한 400 Bad Request
가 발생합니다 물론
from httplib import HTTPConnection
class MyHTTPConnection(HTTPConnection):
_http_vsn_str = '6.9'
conn = MyHTTPConnection("www.stackoverflow.com")
conn.request("GET", "/")
response = conn.getresponse()
print "Status: {} {}".format(response.status, response.reason)
print "Headers: {}".format(response.getheaders())
print "Body: {}".format(response.read())
귀하의 질문입니다 : 당신 말이 맞아요, httplib
도 urllib
도 공개 기능이 내장되어 있습니다. 또한 urlopen
의 경우 대부분 urllib
을 사용하면 안됩니다.
물론 모듈의 구현 세부 정보는 Lukas Graf's answer처럼 항상 신뢰할 수 있습니다.
다른 방법으로,이 모듈 중 하나를 fork하고 수정할 수 있습니다. 그러면 다른 Python 2.x 구현에서 코드가 작동합니다. *. httplib
은 상단에 the source에 대한 링크가있는 모듈 중 하나입니다. 즉, 블랙 박스 라이브러리가 아닌 예제 코드로 서버를 의미합니다.
아니면 그냥 연결해야하지만 공개적으로 문서화 된 최저 수준 기능을 다시 구현할 수 있습니다. httplib
의 경우, 나는 그것이 수 백 줄의 길이 인 httplib.HTTPConnection.putrequest
이라고 생각합니다.
또는 더 많은 후크가있는 다른 라이브러리를 선택할 수 있으므로 걸이가 적습니다.
정말로, 결과를 수동으로 핑거 프린트하도록 사용자 지정 요청을 만들려고한다면, 왜 HTTP 라이브러리를 사용하고 있습니까? 왜 그냥하지 않습니까?
msg = 'GET/HTTP/6.9\r\n\r\n'
s = socket.create_connection((host, 80))
with closing(s):
s.send(msg)
buf = ''.join(iter(partial(s.recv, 4096), ''))
* 즉, 기존의 주요 2.7 구현의 모든이 모듈에 대한 동일한 소스를 공유 2.8, 존재하지 않겠다고하지, 이익의 많은 주어진이고, 그것은 가능성이 새로운 2.x에서 구현 아니다 다른 것입니다. 그리고 3.x로 간다면 httplib
이 재구성되고 이름이 변경되는 반면 urllib
은 완전히 제거되었으므로 더 큰 변화가있을 것입니다.
당신은 클래스 속성 _http_vsn_str
을 httplib.HTTPConnection
를 서브 클래스 및 재정 쉽게 충분히 수행 할 수 있습니다
Status: 400 Bad Request
Headers: [('date', 'Tue, 11 Nov 2014 21:21:12 GMT'), ('connection', 'close'), ('content-type', 'text/html; charset=us-ascii'), ('content-length', '311')]
Body: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
왜이 작업을 수행 하시겠습니까? 불법적 인 버전 번호를 보내서 무엇을 달성하기를 희망합니까? – Kevin
HTTP 핑거 프린팅, 발가락을 실행중인 웹 서버의 버전 및 모델을 확인합니다. – jomag
"httplib 또는 urllib"와 함께 사용해야하는 이유가 있습니까? (특히 후자가 사용되지 않으므로 특히 그렇습니까?) – abarnert