![](/img/trans.png)
[英]Python http server can be reached from browser but not from pi pico
[英]python requests http response 500 (site can be reached in browser)
我試圖弄清楚我在這里做錯了什么,但我一直迷路......
在 python 2.7 中,我正在運行以下代碼:
>>> import requests
>>> req = requests.request('GET', 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu')
>>> req.content
'<html><body><h1>500 Server Error</h1>\nAn internal server error occured.\n</body></html>\n'
如果我在瀏覽器中打開這個,它會正確響應。 我在四處挖掘,發現了一個與 urllib 庫類似的庫( urllib.request.urlopen 出現 500 錯誤),但是我無法適應它,我更想在這里使用請求。
我可能會在這里點擊一些缺少的代理設置,例如此處的建議( Perl File::Fetch Failed HTTP response: 500 Internal Server Error ),但是有人可以解釋一下,這個的正確解決方法是什么?
與瀏覽器請求不同的一件事是 User-Agent; 但是你可以使用這樣的請求來改變它:
url = 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36'}
response = requests.get(url, headers=headers)
print(response.status_code) #should be 200
一些 Web 應用程序還會檢查Origin
和/或Referer
標頭(例如 AJAX 請求); 您可以以與User-Agent
類似的方式設置這些。
headers = {
'Origin': 'http://example.com',
'Referer': 'http://example.com/some_page'
}
請記住,您設置這些標題基本上是為了繞過檢查,所以請做一個好網民,不要濫用人們的資源。
用戶代理以及其他標題元素可能會導致您的問題。
當我遇到這個錯誤時,我看到了瀏覽器使用 Wireshark 發出的常規請求,結果發現除了服務器預期存在的頭部中的 User-Agent 之外,還有其他東西。
在python請求中模擬瀏覽器發送的標頭后,服務器停止拋出錯誤。
上面的答案確實幫助我解決了問題,但我必須找到更多的東西添加到我的標題中,以便某些網站讓我使用 python 請求。 學習如何使用 Wireshark(以上建議)對我來說是一項很好的新技能,但我找到了一種更簡單的方法。
如果你去你的開發視圖(右鍵單擊然后點擊Chrome瀏覽器檢查),然后去網絡選項卡,然后選擇左邊的名稱之一,然后頭下尋找請求的標頭和擴展,你會得到一個您的系統發送到服務器的內容的完整列表。 我開始一次添加我認為最有可能需要的元素並進行測試,直到我的錯誤消失。 然后我將該集合減少到可行的最小集合。 在我的例子中,我的頭只有User-Agent來處理其他代碼問題,我只需要添加Accept-Language鍵來處理其他一些網站。 請參閱下圖作為上述文本的指南。
我希望這個過程可以幫助其他人找到盡可能消除不需要的 Python 請求返回碼的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.