Senden Sie eine ASP.net POST-Python-Requests
Ich bin Schaben eine alte ASP.net Webseite mit Python-requests-Modul.
Hab ich verbrachte 5 Stunden versucht, herauszufinden, wie um dies zu simulieren POST-Anfrage ohne Erfolg. Es tun die Art, wie ich es unten, ich im wesentlichen erhalten Sie eine Meldung "Kein Element passt dieser Artikel Referenz."
Jede Hilfe wären wir sehr dankbar – hier ist der Wunsch und meinem code ein paar Dinge geändert, aus Rücksicht auf die Kürze und/oder Datenschutz:
Meinem eigenen code:
import requests
# Scraping the item number from the website, I have confirmed this is working.
#Then use the newly acquired item number to request the data.
item_url = http://www.example.com/EN/items/Pages/yourrates.aspx?vr= + item_number[0]
viewstate = r'/wEPD...' # Truncated for brevity.
# Create the appropriate request and payload.
payload = {"vr": int(item_number[0])}
item_request_body = {
"__SPSCEditMenu": "true",
"MSOWebPartPage_PostbackSource": "",
"MSOTlPn_SelectedWpId": "",
"MSOTlPn_View": 0,
"MSOTlPn_ShowSettings": "False",
"MSOGallery_SelectedLibrary": "",
"MSOGallery_FilterString": "",
"MSOTlPn_Button": "none",
"__EVENTTARGET": "",
"__EVENTARGUMENT": "",
"MSOAuthoringConsole_FormContext": "",
"MSOAC_EditDuringWorkflow": "",
"MSOSPWebPartManager_DisplayModeName": "Browse",
"MSOWebPartPage_Shared": "",
"MSOLayout_LayoutChanges": "",
"MSOLayout_InDesignMode": "",
"MSOSPWebPartManager_OldDisplayModeName": "Browse",
"MSOSPWebPartManager_StartWebPartEditingName": "false",
"__VIEWSTATE": viewstate,
"keywords": "Search our site",
"__CALLBACKID": "ctl00$SPWebPartManager1$g_dbb9e9c7_fe1d_46df_8789_99a6c9db4b22",
"__CALLBACKPARAM": "startvr"
}
# Write the appropriate headers for the property information.
item_request_headers = {
"Host": home_site,
"Connection": "keep-alive",
"Content-Length": len(encoded_valuation_request),
"Cache-Control": "max-age=0",
"Origin": home_site,
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "__utma=48409910.1174413745.1405662151.1406402487.1406407024.17; __utmb=48409910.7.10.1406407024; __utmc=48409910; __utmz=48409910.1406178827.13.3.utmcsr=ratesandvallandingpage|utmccn=landingpages|utmcmd=button",
"Accept": "*/*",
"Referer": valuation_url,
"Accept-Encoding": "gzip,deflate,sdch",
"Accept-Language": "en-US,en;q=0.8"
}
response = requests.post(url=item_url, params=payload, data=item_request_body, headers=item_request_headers)
print response.text
Was Chrome sagt mir die Anfrage sieht wie folgt aus:
Remote Address:202.55.96.131:80
Request URL:http://www.example.com/EN/items/Pages/yourrates.aspx?vr=123456789
Request Method:POST
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:21501
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:__utma=48409910.1174413745.1405662151.1406402487.1406407024.17; __utmb=48409910.7.10.1406407024; __utmc=48409910; __utmz=48409910.1406178827.13.3.utmcsr=ratesandvallandingpage|utmccn=landingpages|utmcmd=button
Host:www.site.com
Origin:www.site.com
Referer:http://www.example.com/EN/items/Pages/yourrates.aspx?vr=123456789
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Query String Parameters
vr:123456789
Form Data
__SPSCEditMenu:true
MSOWebPartPage_PostbackSource:
MSOTlPn_SelectedWpId:
MSOTlPn_View:0
MSOTlPn_ShowSettings:False
MSOGallery_SelectedLibrary:
MSOGallery_FilterString:
MSOTlPn_Button:none
__EVENTTARGET:
__EVENTARGUMENT:
MSOAuthoringConsole_FormContext:
MSOAC_EditDuringWorkflow:
MSOSPWebPartManager_DisplayModeName:Browse
MSOWebPartPage_Shared:
MSOLayout_LayoutChanges:
MSOLayout_InDesignMode:
MSOSPWebPartManager_OldDisplayModeName:Browse
MSOSPWebPartManager_StartWebPartEditingName:false
__VIEWSTATE:/wEPD...(Omitted for length)
keywords:Search our site
__CALLBACKID:ctl00$SPWebPartManager1$g_dbb9e9c7_fe1d_46df_8789_99a6c9db4b22
__CALLBACKPARAM:startvr
- Nicht sicher, ob es hilft, aber ich denke, Ihr
item_url
ist derzeit mal gebaut, kein string. - Oh ja sicher - nicht bemerkt haben, dass, aber das war nicht mein problem, es ist, weil ich Neuformatierung Dinge auszuschließen, die tatsächlichen URLs 🙂 Danke für den spot, obwohl!
Event
undViewState
Validierung, in der neben der erwähnten (in der Antwort unten) möglichsession
alle Möglichkeiten....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zu viele request-Parameter, und sollte nicht setzen den content-type, content-length, host, Herkunft oder Verbindung Header; , lassen Sie diese zu
requests
zu setzen.Sind Sie auch die Verdoppelung der url-Parameter; entweder fügen Sie die
vr
parameter an die URL manuell oder Verwendungparams
, nicht beides.Kann es gut sein, dass einige der Parameter im POST body erzeugt werden, die von der ASP-Anwendung gebunden, um eine Sitzung. Ich würde verwenden Sie eine GET-Anforderung mit einem Session-Objekt die
valuation_url
, analysieren Sie die form auf dieser Seite zu extrahieren, die__CALLBACKID
parameter. Die Anfragen die Sitzung wird dann speichern Sie alle cookies, die der server setzt und verwenden diese:Die Sitzung, handhabt die Header (Einstellung user-agent und accept-Parameter), nur auf die POST mit der Sitzung zu tun, fügen wir einen referrer-header.
__CALLBACKID=ctl00%24SPWebPartManager1%24g_dbb9e9c7_fe1d_46df_8789_99a6c9db4b22
Gab es mir einen Fehler in der Rückruf, vermutlich aufgrund der ungewöhnlichen Prozent-Zeichen.requests
.%24
ist eine kodierte$
zum Beispiel.requests
und BeautifulSoup mitrobobrowser
; es wird Ihnen helfen, füllen Sie die Formen zu.requests
plus BeautifulSoup plus ein wenig Kleber zur Verarbeitung von Formularen.