2017-03-27 64 views
1

私はMITMproxyデータキャプチャを使用して、次のような結果が得られました。PythonでAPIのPOSTリクエストを作成するにはどうすればよいですか?

POST 
https://gateway.monster.com/seeker/mobile/jobs/search/solr?since=946677600&options=applymethod,calculatedistance 

Accept:   application/json            
Content-Type:  application/json            
User-Agent:  monster/2.12.0/800/iOS;10;iPhone-5s      
Accept-Encoding: gzip, deflate            
x-domain:   mobileservice.ge.monster.ch         
x-brand:   1               
x-ver:   2.12.0              
x-uid:   64e0a64c-ddb5-489c-ab5f-0dec9fed1066       
x-device:   11               
x-device-model: iPhone 5s              
x-os-ver:   10              
Content-Length: 313               
Host:    gateway.monster.com 

JSON 
{ 
"AgentId": 0, 
"CompanyName": "", 
"CompanyXCode": "", 
"Country": "US", 
"Filters": { 
    "CareerLevels": [], 
    "EducationLevels": [], 
    "JobBoardIds": [], 
    "JobTypes": [], 
    "PostingDuration": -1, 
    "YearsOfExp": [] 
}, 
"JobTitle": "", 
"Keywords": "business", 
"Latitude": 0.0, 
"Longitude": 0.0, 
"Page": 1, 
"PageSize": 25, 
"Radius": 10, 
"Sort": "dt.rv.di", 
"Where": "Zurich" 
} 

POST-URL、JSONデータをクエリに添付してヘッダーを設定することで、Pythonでそれを複製しようとしました。 しかし、これは不正なリクエストエラーをもたらします。<Response [400]> URL部分のどこかにあると思われます。since=946677600&options=applymethod,calculatedistance 誰かが私の言うことを教えてください。

これは、Pythonのコードです:

import requests 
import json 
import time 
from datetime import datetime 
import os 
from random import randint 

#query 

url = 'https://gateway.monster.com/seeker/mobile/jobs/search/solr? 
since=946677600&options=applymethod,calculatedistance' 
payload = { 
    "AgentId": 0, 
    "CompanyName": "", 
    "CompanyXCode": "", 
    "Country": "US", 
    "Filters": { 
     "CareerLevels": [], 
     "EducationLevels": [], 
     "JobBoardIds": [], 
     "JobTypes": [], 
     "PostingDuration": -1, 
     "YearsOfExp": [] 
    }, 
    "JobId": "", 
    "JobTitle": "", 
    "Keywords": "software developer", 
    "Latitude": 0.0, 
    "LocationDescription": "new york", 
    "Longitude": 0.0, 
    "Page": 1, 
    "PageSize": 25, 
    "Radius": 20, 
    "Sort": "dt.rv.di", 
    "Where": "new york" 
} 

headers = {'content-type': 'application/json'} 

# Get a copy of the default headers that requests would use 
headers = requests.utils.default_headers() 

# Update the headers with your custom ones 
# You don't have to worry about case-sensitivity with 
# the dictionary keys, because default_headers uses a custom 
# CaseInsensitiveDict implementation within requests' source code. 
#userAgents 
headers.update(
    { 
     'User-Agent': 'Monster/2.12.0/800/iOS;10.2.1;iPhone-6', 
    } 
) 

#get the query result from the url with UA set for a ALL jobs in current location 
response = requests.post(url, data=json.dumps(payload), headers=headers) 
print(response) 
+0

「requests.post(url、json = payload、headers = headers)」を試してください。 –

+0

ありがとうございました。これで500エラーになりました。 –

答えて

1

は可能な最初のようにキャプチャすることと同じパラメータを使用してクエリを実行してみてください。裁判では200

にキャプチャ

headers = requests.utils.default_headers() 

headers_str = """Accept:   application/json            
Content-Type:  application/json            
User-Agent:  monster/2.12.0/800/iOS;10;iPhone-5s      
Accept-Encoding: gzip, deflate            
x-domain:   mobileservice.ge.monster.ch         
x-brand:   1               
x-ver:   2.12.0              
x-uid:   64e0a64c-ddb5-489c-ab5f-0dec9fed1066       
x-device:   11               
x-device-model: iPhone 5s              
x-os-ver:   10              
Content-Length: 313               
Host:    gateway.monster.com""" 

for l in txt.splitlines(): 
    k, v = l.split(':') 
    headers[k] = v.strip() 

応答の変化から、ヘッダのフルセットで実行し、エラーすると、あなたは、必要なヘッダがx-domain: mobileservice.ge.monster.chあったと判断することができます。

+0

ありがとうございます。私は完全なヘッダー1:1をクエリに含める必要がありましたが、あなたの答えはターゲットの真正面に私を置きました –

関連する問題