2016-03-29 10 views
-1

私はウェブサイトでC++コンソールアプリケーションを接続し、htmlページを取得する必要があります。私はこのコードを使用します。C++とクリーンコードを使用してHTTP GETリクエストを使用するには?

int main() { 
    WSADATA wsaData; 
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { 
     cout << "WSAStartup failed.\n"; 
     system("pause"); 
     return 1; 
    } 
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    struct hostent *host; 
    host = gethostbyname("www.giallozafferano.it"); 
    SOCKADDR_IN SockAddr; 
    SockAddr.sin_port = htons(80); 
    SockAddr.sin_family = AF_INET; 
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr); 
    cout << "Connecting...\n"; 
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0) { 
     cout << "Could not connect"; 
     system("pause"); 
     return 1; 
    } 
    cout << "Connected.\n"; 
    send(Socket, "GET/HTTP/1.1\r\nHost: www.giallozafferano.it/ricerca-ricette/pasta/\r\nConnection: close\r\n\r\n", strlen("GET/HTTP/1.1\r\nHost: www.giallozafferano.it/ricerca-ricette/pasta/\r\nConnection: close\r\n\r\n"), 0); 
    char buffer[10000]; 
    int nDataLength; 
    while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0) { 
     int i = 0; 
     while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {   
      i += 1; 
     } 
    } 

    string page(buffer); 
    page = page.erase(page.size()-1); 

    cout << endl << page << endl; 

    size_t found = page.find("<Risultati Ricerca"); 
    if (found != std::string::npos) { 
     cout << "risultati found at position: " << found << '\n'; 
    } 

    closesocket(Socket); 
    WSACleanup(); 
    system("pause"); 
    return 0; 
} 

それは動作しますが、サイトの結果は、私がサイトに接続するたびに異なっている...誰かが私を助けることができますか?

答えて

1

ホストのルート/ホームページ(GET /)を要求しています。おそらく静的ページではなく、動的ビルドページです。

注:あなたはおそらく

GET /ricerca-ricette/pasta/ 

とホストの場所としてに

GET/

を有効にするには、単に、一つの変数にすべてを入れてはstrlenを使用すると

をwww.giallozafferano.it手動で文字列を複製する際の間違いを避けてください。

+0

Prego。私は、イタリア語のvengano bannateのイタリア語で、私はドナンドゥ・セ・ル・リスポステ... – marom

+0

私はいいとは思いますが、おかげさまではありますが、それは5回働いていましたが、今度は再び働きません。 ..質問をもう一度申し訳ありません@marom –

+0

もしあなたがLinuxの箱を持っていれば、あなたのプログラムの出力をwgetの出力と比較してみてください。または、 "windows用wget"のgnuバージョン – marom

関連する問題