Datenabfrage über Internet
-
Hallo,
ich habe vor einiger Zeit ein kleines Script zusammengebastelt, dass mir über ein PHP File einen Wert holt und lokal in einer Textfile speichert. Seid kurzem geht das aber nicht mehr.
Das PHP
<?php $user = $_GET["ith"]; if ( $user == "111" ) { echo test; } ?>
Aufrufen kann ich es mit www.meinedomain.de/test.php?ith=111
dann wird mir im Browser auch test angezeigt.
HINTERNET connect = InternetOpen("MyBrowser",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0); if(!connect){ cout<<"Connection Failed or Syntax error"; return 0; } string FullURL = "http://httacessuser:htaccesspass@meinedomain.de/test.php?ith=111"; HINTERNET OpenAddress = InternetOpenUrl(connect, FullURL.c_str() , NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE|INTERNET_FLAG_KEEP_CONNECTION, 0); if ( !OpenAddress ) { DWORD ErrorNum = GetLastError(); cout<<"Fehler beim öffnen der URL" <<endl; cout << "Error: "<<ErrorNum; InternetCloseHandle(connect); return 0; } char DataReceived[64]; DWORD NumberOfBytesRead = 0; ofstream datei; datei.open("test.txt"); while(InternetReadFile(OpenAddress, DataReceived, 64, &NumberOfBytesRead) && NumberOfBytesRead) { DataReceived[NumberOfBytesRead]='\x00'; datei << DataReceived; datei.close(); }
Wenn ich das so mache, dann geht das.
Wenn ich allerdings die erste Zeile so schreibe
string FullURL = "http://"+htuser+":"+htpass+"@"+domain+pfad+"?"+phpuser+"="+phppass;
dann geht das nicht. Ich bekomme beim kompilieren diese Meldung
**
url.exe hat einen Haltepunkt ausgelöst.**Ich habe keinen Haltepunkt gesetzt. In winapisupp.c wird dieser Block markiert
**{
/* specifies default handling within UnhandledExceptionFilter */
SetUnhandledExceptionFilter(NULL);/* invoke default exception filter /
return UnhandledExceptionFilter(exceptionInfo);
}*An der Datei habe ich nicht rumgespielt.
Wenn ich wiederum
cout << "http://"+htuser+":"+htpass+"@"+domain+pfad+"?"+phpuser+"="+phppass;
vor HINTERNET connect = .... oder string FullURL = ... schreibe, dann wird mir der Pfad richtig angezeigt. Also gehe ich davon aus, dass die übernahme der Werte richtig ist.
Woran liegt das? Und wie löse ich das Problem?
-
Oh Freund...
Starte das Ding doch einfach im Debugger und guck wo es fetzt.Ich behaupte mal dass deine Angaben nicht richtig sind, und das Problem auftritt weil du irgendwo nen NULL-Zeiger an
std::string
übergibst.
Ist zumindest das einzigeUnd natürlich hat dein Code ein Problem wenn der Server zufällig genau 64 Byte auf einmal schickt. Dann machts Bumm. Oder auch nicht und es passiert nur Unsinn deswegen. Auf jeden Fall Bug.
-
Hallo Itheru,
insbesondere mit https muss man etwas nachhelfen,
mach das mal so:GetHtm("mydomain.de","//test.php?name=Franz&Strasse=weg 3");
PseudoCode!:
CString &CHttps::GetHtm(const CString strServer,const CString strUrl) { static CString strAnswer; HINTERNET hSession,hConnect,hRequest; CComBSTR url(strUrl); CComBSTR svr(strServer); strAnswer.Empty(); hSession = WinHttpOpen( L"WinHTTP/1.0",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS, 0 ); if(!hSession) return strAnswer; if(!(hConnect = WinHttpConnect( hSession,svr,INTERNET_DEFAULT_HTTPS_PORT,0))) return strAnswer; if(!(hRequest = WinHttpOpenRequest( hConnect, L"GET", url,NULL, WINHTTP_NO_REFERER,WINHTTP_DEFAULT_ACCEPT_TYPES,WINHTTP_FLAG_SECURE))) return strAnswer; DWORD options = SECURITY_FLAG_IGNORE_CERT_CN_INVALID| SECURITY_FLAG_IGNORE_CERT_DATE_INVALID|SECURITY_FLAG_IGNORE_UNKNOWN_CA; if(!WinHttpSetOption( hRequest, WINHTTP_OPTION_SECURITY_FLAGS ,(LPVOID)&options, sizeof(DWORD) )) return strAnswer; if(!WinHttpSendRequest(hRequest,WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA, 0, 0, 0 )) return strAnswer; if(!WinHttpReceiveResponse(hRequest,NULL)) return strAnswer; DWORD dwSize(0),dwDownloaded(0); LPSTR pszOutBuffer; do { if(!WinHttpQueryDataAvailable( hRequest, &dwSize) || !dwSize) break; if(!(pszOutBuffer = new char[dwSize+1])) break; ZeroMemory(pszOutBuffer,dwSize+1); if(!WinHttpReadData(hRequest,(LPVOID)pszOutBuffer,dwSize,&dwDownloaded)) break; strAnswer += (char *)pszOutBuffer; delete [] pszOutBuffer; }while(dwSize > 0); if(hRequest) WinHttpCloseHandle(hRequest); if(hConnect) WinHttpCloseHandle(hConnect); if(hSession) WinHttpCloseHandle(hSession); strAnswer.Replace(" \r\n",""); return strAnswer; }