使用代理的 http GET - Curl 命令有效,但 python“请求”库不
Posted
技术标签:
【中文标题】使用代理的 http GET - Curl 命令有效,但 python“请求”库不【英文标题】:http GET using proxy - Curl command works but python "requests" library does not 【发布时间】:2017-09-15 21:16:51 【问题描述】:我有以下工作 curl 命令:
curl -x http://<PROXY URL>:3128 -u myUsername 'https://logs.company.net/daily-2017.04.13/_search?pretty' -d 'BIG JSON BLOB
我正在尝试使用 requests 库将其转换为 python。这是我目前所拥有的:
json_string = '''BIG JSON BLOB'''
print(json_string)
mydict = json.loads(json_string) # obj now contains a dict of the data
proxies = "http" : "http://<proxy url>:3128"
r = requests.get("https://logs.company.net/daily-2017.04.13/_search?pretty", data=json_string,auth=(self.username, self.password), proxies=proxies, verify= False) #
print(r.status_code, r.reason)
print(str(r.content))
据我了解,这与上述基本相同,但是当 curl 命令没有时,它在我的测试服务器上超时。
有谁知道这里有什么问题或者我该如何调试它?我本可以使用 subprocess 模块破解 curl 命令,但我对调试网络东西还很陌生,我想了解它为什么不起作用,因此决定在这里提问。
谢谢!
【问题讨论】:
【参考方案1】:根据curl 命令的手册页,-d
标志用于使用 POST 请求发布数据:
-d/--数据
(HTTP) 将 POST 请求中的指定数据发送到 HTTP 服务器,就像浏览器在用户填写 html 表单并按下提交按钮时所做的那样。这将导致 curl 使用内容类型 application/x-www-form-urlencoded 将数据传递给服务器。与 -F/--form 比较。
因此,您需要使用requests.post()
函数而不是requests.get()
。
例如:
r = requests.post("https://logs.company.net/daily-2017.04.13/_search?pretty",
data=json_string,
auth=(self.username, self.password),
proxies=proxies,
verify=False)
【讨论】:
感谢 Laurent 我对此感到有些困惑,因为我在网上看到了仍然使用 get() 发送数据的示例。不幸的是,改变它仍然会导致超时。 @OnMyWayToGodDontKnow:代理或远程服务器是否超时? 代理超时。我想知道它是否可能与此有关:***.com/a/8816739/2765131以上是关于使用代理的 http GET - Curl 命令有效,但 python“请求”库不的主要内容,如果未能解决你的问题,请参考以下文章