2017-03-16 3 views
0

Suche url - http://aptaapps.apta.org/findapt/Default.aspx?UniqueKey=.Falsche Antwort von Post-Anfrage mit Anfragen

Benötigen Sie Daten für die Postleitzahl (10017) Senden von Postanfragen, aber ich bekomme die Suchseite (Antwort von der Such-URL), aber nicht die Seite mit Ergebnissen.

Mein Code:

# -*- 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) 

Antwort

0

Kurze Antwort:

Versuch zu ersetzen:

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

zu:

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

Lange Antwort:

Für POST-Methode gibt es viele Arten von Datentypen zu hinterlassen. Wie form-data, x-www-form-urlencoded, application/json, file und etc.

Sie sollten wissen, was die Art der Post-Daten ist. Es gibt ein brillantes Chrom-Plugin namens postman. Sie können damit verschiedene Datentypen ausprobieren und herausfinden, welche die richtige sind.

Nachdem Sie finden, verwenden Sie den richtigen Parameterschlüssel in requests.post, den Parameter data wenn für form-data und x-www-form-urlencoded. Der Parameter json ist für das JSON-Format. Sie können auf das Dokument mit Anforderungen verweisen, um mehr über den Parameter zu erfahren.

+0

Hallo Kingname, danke für deine Antwort. Der Datentyp ist "x-www-form-urlencoded", also ist der Parameter korrekt, aber der Code funktioniert nicht. P.S .: Ich habe versucht, es zu json zu ändern. Funktioniert nicht. – GiveItAwayNow

+0

OK, 1. Entfernen Sie "Content-Length": "3025" aus Ihren Kopfzeilen. und versuchen Sie es erneut. 2. Wenn Schritt 1 immer noch nicht funktionieren kann, installieren Sie bitte Postbote und versuchen Sie es zu verwenden, um zu finden, ob es die richtige Anfrage stellen kann. – Kingname

+0

1. Funktioniert nicht. 2. Ich habe es installiert, aber es funktioniert auch nicht. – GiveItAwayNow