Autor | Zpráva | ||
---|---|---|---|
m93a Profil |
Ahoj,
zkouším udělat něco jako neoficiální API, ale narazil jsem na problém. Původní myšlenka: Uživatel zadá své přihlašovací údaje do formuláře, který se ovšem neodešle přímo na web, kam se přihlašuje, ale na stránku na mém webu, který je teprve odešle na oficiální server. Výsledné HTML zpracuje, řádně zvalidní, odstraní reklamy a získá token uživatele, se kterým bude přistupovat k dalším službám. Problém: Upravil jsem formulář, aby odesílal POST data do mého scriptu, ale po zpracování script vyhodil chybu: "Warning: file_get_contents(http://server.cz/script/): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in ... on line ..." $html = file_get_contents( 'http://m.strava.cz/Stravnik/formprihlaseni.aspx', false,stream_context_create( array('http'=>array( 'header'=> "User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\n Content-type: application/x-www-form-urlencoded\r\n Content-Lenght: 1280\r\n", 'method'=>'POST', 'content'=>http_build_query($_POST) ) )) ); // Toho dalšího už si nevšímejte... $html = mb_convert_encoding($html,"utf-8","auto"); $html = preg_replace('#<!DOCTYPE html PUBLIC\s*".*[^"]"\s*(|".*[^"]")\s*>#isU','<!DOCTYPE HTML>',$html); $html = preg_replace('#<html.*[^>]>.*[^<]<head><title>#isU',"<html>\n<head>\n<meta charset=\"utf-8\" />\n<title>",$html); $html = preg_replace('#<link rel="shortcut icon".*[^>]>#isU','',$html); $html = preg_replace('#</body>#isU',"<iframe height=0 width=0><endora></iframe></body>",$html); $html = preg_replace('#<form(.*[^>])action=".*[^"]"(.*[^>])>#isU','<form $1 action="?service=mloginredir" $2>',$html); echo $html; Promiňte mi tu nepřehlednost, ale šetřím řádky :D Předem děkuji za odezvu, Michal. |
||
Davex Profil |
#2 · Zasláno: 9. 6. 2012, 22:13:39
Kdybych byl webový server, tak by se mi nelíbila HTTP hlavička v této podobě:
"User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\n Content-type: application/x-www-form-urlencoded\r\n Content-Lenght: 1280\r\n" To odřádkování a odsazení na začátku tam nemá co dělat. |
||
m93a Profil |
#3 · Zasláno: 9. 6. 2012, 22:30:49
Davex,
Ve skriptu to mám vše na jednom řádku, tady jsem to odřádkoval jen pro přehlednost, ale díky za postřeh. Jo, ještě se mi vypnutím chyb ('ignore_errors'=>true) získat z toho cizího serveru vytáhnout tohle: Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [NullReferenceException: Object reference not set to an instance of an object.] iStravneM.Komponenty.Pristupy.ZapisPristup(HttpRequest request) in D:\Vyvoj-NET\istravnem\iStravneM\Komponenty\pristupy.cs:39 iStravneM.Master.Site1.Page_Load(Object sender, EventArgs e) in D:\Vyvoj-NET\istravnem\iStravneM\Master\iStravneM1.Master.cs:15 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 Version Information: Microsoft .NET Framework Version:2.0.50727.3634; ASP.NET Version:2.0.50727.3634 |
||
Davex Profil |
#4 · Zasláno: 9. 6. 2012, 22:53:53
Nepomůže opravit překlep v
Content-Length ?
|
||
m93a Profil |
#5 · Zasláno: 10. 6. 2012, 18:38:10
Jé, díky :D
Ono to nakonec stejně nepomohlo, tak jsem se to rozhodl poslat přes GET. Připojení je nezašifrované tak jak tak a script, který data přijímá, uživatele ihned přesměruje, takže se na obrazovce údaje nezobrazí. Tak díky za pomoc :D |
||
Časová prodleva: 12 let
|
0