簡體   English   中英

Curl 有效,但 Python 請求無效

[英]Curl works but not Python requests

我正在嘗試從http://erdos.sdslabs.co/users/shagun.json獲取 JSON 響應。 使用瀏覽器/Python 的請求庫會導致身份驗證錯誤,但 curl 似乎工作正常。

curl http://erdos.sdslabs.co/users/shagun.json 

返回 JSON 響應。

為什么 curl 請求會在普通瀏覽器或基於請求的請求失敗時工作?

使用telnet檢查:

$ telnet erdos.sdslabs.co 80
Trying 62.141.37.215...
Connected to erdos.sdslabs.co.
Escape character is '^]'.
GET http://erdos.sdslabs.co/users/shagun.json HTTP/1.0

HTTP/1.1 302 Found
Date: Sat, 26 Jul 2014 11:18:58 GMT
Server: Apache
Set-Cookie: PHPSESSID=juvg7vrg3vs4t00om3a95m4sc7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: /login
Access-Control-Allow-Origin: http://erdos.sdslabs.co
X-Powered-By: PleskLin
Content-Length: 1449
Connection: close
Content-Type: application/json

{"email":"sshagun.sodhani@gmail.com","username":"shagun","name":"Shagun      
[...]

我們看到 Web 服務器正在響應 302 - 重定向到 Location /login。 請求和 Web 瀏覽器都遵守這一點,並到達登錄提示。 但是,我們看到 Web 服務器也在使用您想要的 json 進行響應,並且 curl(和 telnet)非常簡單,可以只接受該數據。

最佳做法是修復 Web 服務器,使其不需要您登錄,或者在要求用戶登錄的同時不提供受密碼保護的數據。

如果您無法更改 Web 服務器,您可以告訴 requests 模塊忽略重定向:

import requests
result = requests.get('http://erdos.sdslabs.co/users/shagun.json', allow_redirects=False)
print result.content

如果您在您的環境中配置了代理,請在您的會話/請求中也定義它。

例如會話:

    my_proxies = {  
        'http': 'http://myproxy:8080',  
        'https': 'https://myproxy:8080'  
    }

    session = requests.Session()  
    request = requests.Request('POST', 'http://my.domain.com', data=params_template, headers=req_headers, proxies=my_proxies)  
    prepped = session.prepare_request(request)  
    response = session.send(prepped)  

見文檔:
請求http://docs.python-requests.org/en/master/user/quickstart/
會話http://docs.python-requests.org/en/master/user/advanced/

對於像我這樣的已故谷歌員工:

就我而言,問題是我使用requests.get(url, data={...})提供了 url 參數。 requests.get(url, params={...}) ,問題解決。

我的經驗是,一些 Python 請求前一天工作的代碼在第二天沒有回來,而 curl 仍在工作。 這不是代碼,也不是服務器,閱讀此討論后,我突然意識到連接中的某些內容可能已更改。 我禁用並重新啟用了我的 Wifi,瞧,它又工作了。

我沒有進一步調查,請求可能緩存了一些不再有效的東西。 很抱歉這個不合格的輸入,但也許它會幫助那里的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM