2017-05-03 97 views
0

我試圖使用Python POST請求來自動OP.GG召喚師輪廓的清爽:Python的POST請求418錯誤

在頁面上有一個調用下面的JavaScript文件按鈕: https://opgg-static.akamaized.net/js3/summoner.js?1492755586

瀏覽此網址:https://na.op.gg/summoner/userName=hamski

運行的代碼在Chrome的控制檯中的後續片段完美的作品。按預期刷新配置文件。

$.OP.GG.ajax.getJSON({ 
    url: ('/summoner/ajax/renew.json/'), 
    method: 'post', 
    data: { 
     summonerId: 47220368 
    }, 
    callback: { 
     onJSON: function(json){ 
      console.log(json) 
     }, 
     onError: function(error){ 
      $.OP.GG.summoner.renewBtn.stop(btn); 
      alert(error); 
     } 
    } 
}); 

我沒有使用請求模塊

import json 
import requests 

url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

data=json.dumps(payload) 

print data 

r = requests.post(url, data) 

print r 
print r.status_code 
print r.text 

其結果是418錯誤POST請求。

<Response [418]> 418

r.text基本上給了我這個頁面的HTML: https://na.op.gg/summoner/ajax/renew.json/


更新代碼:

import json 
import requests 
from fake_useragent import UserAgent 

ua = UserAgent(cache=False) 


url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

headers = requests.utils.default_headers() 
headers.update(
{ 
    'User-Agent':ua.random 
}) 

print ua.random 

session = requests.Session() 
r1 = session.get("https://na.op.gg/summoner/userName=hamski",headers=headers) 
print session.cookies.get_dict() 

r = requests.post(url, data=json.dumps(payload),cookies=r1.cookies, headers=headers) 

print r 
print r.status_code 
print r.text 
+0

你一直在談茶壺。錯誤代碼418「我是茶壺」是一個愚蠢的玩笑。看起來開發者有些幽默。您的問題應該來自瀏覽器已經過身份驗證並且Python請求不是。檢查瀏覽器控制檯的網絡選項卡,查看請求中是否有任何內容可以對其進行身份驗證。 –

+0

仍不確定問題是什麼。你能通過檢查網絡標籤來詳細說明你的意思嗎?我在頭上添加了一個隨機用戶代理以及默認頭文件。我還從以前的會話中檢索了Cookie,並在發佈請求中添加了這些Cookie。運行代碼獲得相同的結果。非常感謝! – zhivago

回答

0

我能找出什麼在失蹤我的請求使用請求攔截器 - 名爲「郵遞員」的Chrome擴展

原來,cookies和標題完全沒有關係。

用data = payload替換data = json.dumps(payload)解決了這個問題。