亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有什么方法可以通過給定的請求格式文本來初始化 HTTP 請求嗎?

有什么方法可以通過給定的請求格式文本來初始化 HTTP 請求嗎?

不負相思意 2023-06-27 13:41:30
我有一個 GET 請求格式的文本:GET /40x.jpg HTTP/1.1\r\n\Host: ns.pb.cachecn.net\r\n\Connection: keep-alive\r\n\Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n\User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1636.2 Safari/537.36\r\n\Accept-Encoding: gzip,deflate,sdch\r\n\Accept-Language: zh-CN,zh;q=0.8\r\n\\r\n"我們知道Python中有三種模塊方式來創建HTTP請求:urllib2/urllibhttplib/urllibRequests但是是否可以通過導入給定的文本來創建 HTTP 請求?我的意思是使用 a string = the GET request text,并使用這個變量string來創建 HTTP 請求。不要使用很多步驟,因為區分request header,很復雜request body。
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

庫 ( urllib2/urllib, httplib/urllib, Requests) 被封裝以方便高級使用。


如果你想發送格式化的HTTP請求文本,你應該考慮Python套接字庫。


有一個套接字示例:


import socket


get_str = 'GET %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36\r\nAccept: */*\r\n\r\n'%("/", "www.example.com")


def get(hostname, port):

    sock = socket.socket()

    sock.connect((hostname, port))


    b_str = get_str.encode("utf-8")

    sock.send(b_str)


    response = b''

    temp = sock.recv(4096)

    while temp:

        temp = sock.recv(4096)

        response += temp


    return response.decode(encoding="utf-8")


res = get(hostname="www.example.com", port=80)

print(res)


查看完整回答
反對 回復 2023-06-27
?
達令說

TA貢獻1821條經驗 獲得超6個贊

如果您真的非常愿意,您可以欺騙http.client.HTTPSConnection(或http.client.HTTPConnection對于普通的 HTTP 連接)做您想做的事情。這是Python 3代碼;在Python 2中應該可以使用不同的導入和常規字符串而不是字節。


import http.client


# Requesting https://api.ipify.org as a test

client = http.client.HTTPSConnection('api.ipify.org')

# Send raw HTTP. Note that the docs specifically tell you not to do this

# before the headers are sent.

client.send(b'GET / HTTP/1.1\r\nHost: api.ipify.org\r\n\r\n')

# Trick the connection into thinking a request has been sent. We are

# manipulating the name-mangled __state attribute of the connection,

# which is very, very ugly.

client._HTTPConnection__state = 'Request-sent'

response = client.getresponse()

# should print the response body as bytes, in this case e.g. b'123.10.10.123'

print(response.read())

請注意,我不建議您這樣做;這是一個非常令人討厭的黑客行為。盡管您明確表示不想解析原始請求字符串,但這絕對是正確的做法。


查看完整回答
反對 回復 2023-06-27
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您可以將該字符串寫入連接到 HTTP 服務器端口的套接字對象,但這是發出請求的相當困難的方法。我建議使用 requests 包。它真的很簡單又方便。



查看完整回答
反對 回復 2023-06-27
  • 3 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號