2012-03-06 39 views
0

我需要幫助,從網頁獲取第一行,找到一個小腳本與ipchicken.com合作。 但我無法與我一起運行它的網頁腳本,張貼原始代碼,因爲我對所有事情都很生氣......爲此! 我搜索,在這裏,但我不覺得我張貼的問題..InternetReadFile獲取專用線

,但它需要正確地編輯與我的PHP腳本.. PHP> file.php?GET =版本或IP 192.168 .1.1口88

switch($_GET['get']) 
    { 
case "ip" : 
echo ($_SERVER['REMOTE_ADDR']); 
    break; 

case "ver" : 
print "0.1.1"; 
    break; 
default : 
break; 
    } 

原來這裏是C++代碼>

char *getwebpage(char *hostname, char *uri, unsigned long *total) 
{ 
    if(!hostname || !uri || !total) return (char *)0; 
    *total = 0; 

    char *headers1 = "Accept: text/html, */*\nAccept-Language: en-GB\nAccept-Encoding: none\nHost: "; 
    char *headers2 = (char *)malloc(strlen(headers1) + strlen(hostname) + 2); 
    sprintf(headers2, "%s%s\n", headers1, hostname); 
    HINTERNET session = InternetOpen("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); 
    HINTERNET connect = InternetConnect(session, hostname, 80, "", "", INTERNET_SERVICE_HTTP, 0, 0); 
    HINTERNET http = HttpOpenRequest(connect, "GET", uri, HTTP_VERSION, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0); 
    HttpSendRequest(http, headers2, strlen(headers2), NULL, 0); 
    free(headers2); 

    unsigned long read; 
    char buffer[1024]; 
    char *final = (char *)malloc(1024); 
    memset(buffer, 0, 1024); 
    while(InternetReadFile(http, buffer, 1024, &read) && (read != 0)){ 
     CopyMemory((final + *total), buffer, read); 
     *total += read; 
     final = (char *)realloc(final, (*total + 1024)); 
     memset((final + *total), 0, 1024); 
    } 

    InternetCloseHandle(http); 
    InternetCloseHandle(connect); 
    InternetCloseHandle(session); 

    return final; 
} 

    int getmyipaddress(char *buffer) 
    { 
     unsigned long length; 
     char *webpage = getwebpage("www.ipchicken.com", "/", &length); 
     if(!webpage || length == 0) return 0; 
     int result = 0; 
     char *start = strstr(webpage, "<b>"); 
     if(start){ 
      start += 3; 
      while(*start <= ' ') start++; 
      char *end = start; 
      while(*end > ' ') end++; 
      *end = 0; 
      strcpy(buffer, start); 
      result = 1; 
     } 
     free(webpage); 
     return result; 
    } 

和..酵母如何添加端口選擇這樣的 - >

char *getwebpage(char *hostname, char *uri, char *port, unsigned long *total) 
HINTERNET connect = InternetConnect(session, hostname, port, "", "", INTERNET_SERVICE_HTTP, 0, 0); 
+0

並且問題是? – marcinj 2012-03-06 21:47:15

+0

然後我嘗試從我的文件中獲取信息是一些字符串,如txt模式下的asci字節,它的工作方式沒有int getmyipaddress(char * buffer)函數和 'unsigned long read; char buffer [1024]; char * final =(char *)malloc(1024); memset(buffer,0,1024); (InternetReadFile(http,buffer,1024,&read)&&(read!= 0))CopyMemory((final + * total),buffer,read); * total + = read; final =(char *)realloc(final,(* total + 1024)); memset((final + * total),0,1024); } ' – 01001110 2012-03-06 22:01:38

+0

替換爲> [code] \t BYTE Buffer [512]; DWORD BytesRead; \t而(的InternetReadFile(HTTP,緩衝液,3 * 6,&BytesRead)&& BytesRead!= 0){ \t \t的printf( 「版本:[%S]」,緩衝液); \t} [/ code] – 01001110 2012-03-06 22:02:03

回答

1

你說你的服務是在端口88,但你撥打:

HINTERNET connect = InternetConnect(session, hostname, 80, .... 

所以也許更改爲:

HINTERNET connect = InternetConnect(session, hostname, 88, .... 
+0

不行,端口不是問題。問題來自拷貝和其他處於進程中的字符串。 – 01001110 2012-03-06 22:24:52

+0

雖然在getwebpage看起來不錯,也許你只是得到你期望會有所不同的結果?但這是服務器上的問題,就像你可能返回utf16一樣,但你期望在C++中接收utf8 – marcinj 2012-03-07 08:45:25

0

嘗試做的InternetReadFile(HTTP,&緩衝,1024,&讀) 。我不確定這是否會解決您的問題,但我相當肯定必須在函數InternetReadFile()中調用緩衝區指針