簡體   English   中英

我從 PYTHON 撥打 API 我收到回復 406 Not Acceptable

[英]I Call API from PYTHON I get the response 406 Not Acceptable

我在我的網站上創建了一個 API,我試圖從 python 調用一個 API,但我總是得到 406 作為響應,但是,如果我將 url 與參數一起放入瀏覽器,我可以看到正確的答案

我已經在你可以測試你擁有 API 的頁面上做了一些測試,我在瀏覽器中測試它並且工作正常。 我已經跟進了解釋如何從 python 調用 API 的手冊,但我沒有得到正確的響應:(

這是 API 的 URL,參數為: https://icassy.com/api/login.php?usuario_email=warles34%40gmail.com&usuario_clave=123

這是我用來從 Python 調用 API 的代碼

import requests
urlLogin = "https://icassy.com/api/login.php"
params = {'usuario_email': 'warles34@gmail.com', 'usuario_clave': '123'}
r = requests.get(url=urlLogin, data=params)
print(r)
print(r.content)

我得到:

<Response [406]>
b'<head><title>Not Acceptable!</title></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>'

我應該以 JSON 格式收到成功消息和 apikey,如下所示:

{"message":"Successful login.","apikey":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLm9yZyIsImF1ZCI6Imh0dHA6XC9cL2ljYXNzeS5jb20iLCJpYXQiOjEzNTY5OTk1MjQsIm5iZiI6MTM1NzAwMDAwMCwiZGF0YSI6eyJ1c3VhcmlvX2lkIjoiMzQiLCJ1c3VhcmlvX25vbWJyZSI6IkNhcmxvcyIsInVzdWFyaW9fYXBlbGxpZG8iOiJQZXJleiIsInVzdWFyaW9fZW1haWwiOiJ3YXJsZXMzNEBnbWFpbC5jb20ifX0.bOhrC-vXhQEHtbbZGmhLByCxvJY7YxDrLhVOfy9zeFc"}

看起來服務器上有一個驗證來檢查請求是否來自某個瀏覽器。 添加用戶代理標頭應該這樣做 -

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get(url=urlLogin, params=params, headers=headers)

用戶代理的這個鏈接將來可能會派上用場。

我發現,我請求的服務托管在擁有機器人管理器的 Akamai 上。 它查看請求(它來自哪里),如果它確定它是一個機器人,你會得到一個 406 錯誤。

解決方案是要求將服務器 IP 列入白名單,或者向所有服務器通信發送特殊標頭。

就我而言,我有

'Accept': 'text/plain'

在我用它替換后它起作用了

'Accept': 'application/json'

我根本不需要使用用戶代理

暫無
暫無

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

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