2017-03-16 125 views
0

搜索網址 - http://aptaapps.apta.org/findapt/Default.aspx?UniqueKey=來自請求發佈請求的錯誤回覆

需要獲取郵政編碼的數據(10017) 發送郵寄請求,但收到搜索頁面(來自搜索URL的響應),但沒有收到帶有結果的頁面。

我的代碼:

# -*- coding: UTF-8 -*- 

import requests 
from bs4 import BeautifulSoup, element 


search_url = "http://aptaapps.apta.org/findapt/Default.aspx?UniqueKey=" 
session = requests.Session() 
r = session.get(search_url) 
post_page = BeautifulSoup(r.text, "lxml") 
try: 
    target_value = post_page.find("input", id="__EVENTTARGET")["value"] 
except TypeError: 
    target_value = "" 

try: 
    arg_value = post_page.find("input", id="__EVENTARGUMENT")["value"] 
except TypeError: 
    arg_value = "" 

try: 
    state_value = post_page.find("input", id="__VIEWSTATE")["value"] 
except TypeError: 
    state_value = "" 

try: 
    generator_value = post_page.find("input", id="__VIEWSTATEGENERATOR")["value"] 
except TypeError: 
    generator_value = "" 

try: 
    validation_value = post_page.find("input", id="__EVENTVALIDATION")["value"] 
except TypeError: 
    validation_value = "" 

post_data = { 
      "__EVENTTARGET": target_value, 
      "__EVENTARGUMENT": arg_value, 
      "__VIEWSTATE": state_value, 
      "__VIEWSTATEGENERATOR": generator_value, 
      "__EVENTVALIDATION": validation_value, 
      "ctl00$SearchTerms2": "", 
      "ctl00$maincontent$txtZIP": "10017", 
      "ctl00$maincontent$txtCity": "", 
      "ctl00$maincontent$lstStateProvince": "", 
      "ctl00$maincontent$radDist": "1", 
      "ctl00$maincontent$btnSearch": "Find a Physical Therapist" 
      } 

headers = { 
     "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
     "Accept-Encoding": "gzip, deflate", 
     "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4", 
     "Cache-Control": "max-age=0", 
     "Content-Length": "3025", 
     "Content-Type": "application/x-www-form-urlencoded", 
     "Host": "aptaapps.apta.org", 
     "Origin": "http://aptaapps.apta.org", 
     "Proxy-Connection": "keep-alive", 
     "Referer": "http://aptaapps.apta.org/findapt/default.aspx?UniqueKey=", 
     "Upgrade-Insecure-Requests": "1", 
     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" 
     } 

post_r = session.post(search_url, data=post_data, headers=headers) 
print(post_r.text) 

回答

0

答案很簡單:

嘗試更換:

post_r = session.post(search_url, data=post_data, headers=headers) 

到:

post_r = session.post(search_url, json=post_data, headers=headers) 

龍答:

對於POST方法,有許多種數據類型的發佈。如form-datax-www-form-urlencodedapplication/jsonfile

你應該知道什麼是後數據的類型。有一個輝煌的Chrome插件叫postman。您可以使用它來嘗試不同的數據類型,並找到正確的數據類型。

後你會發現,使用requests.post正確的參數鍵,參數data如果form-datax-www-form-urlencoded。參數json用於json格式。您可以參考請求文檔以瞭解有關該參數的更多信息。

+0

嗨Kingname,謝謝你的回答。 數據類型爲「x-www-form-urlencoded」,所以參數正確但代碼不起作用。 P.S .:我試圖將其更改爲json。不起作用。 – GiveItAwayNow

+0

行, 1.從你的標題中刪除''Content-Length「:」3025「'。並重試。 2.如果步驟1仍然無法工作,請安裝郵遞員,並嘗試使用它來查找是否可以提出正確的請求。 – Kingname

+0

1.不起作用。 2.我已經安裝了它,但它不起作用。 – GiveItAwayNow