0

承認ヘッダーを含むcプログラミングでhttp(GETリクエスト)を実装しようとしていますが、問題は(200 ok)を取得できないことです。通信のセッションが1つしかありません(401承認のサーバー応答が必要です) )しかしそれ以上ではありません。

**while(1){

    strcpy(buffer,"GET /mywebsite/login.html/ HTTP1.1 \n\n");
    strcat(buffer,"Host: localhost\n\n");
    strcat(buffer,"Connection: keep-alive\n\n");
    strcat(buffer,"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\n\n");
    strcat(buffer,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8\n\n");
    strcat(buffer,"Accept-Encoding: gzip,deflate,sdch\n\n");
    strcat(buffer,"Accept-Language: en-US,en;q=0.8\n\n");
    strcat(buffer,"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\n\n");
    status = send(sock, buffer, strlen(buffer), 0);
    if(status == -1) {
        printf("Error in send(). Error code: %d\n", WSAGetLastError());
        continue;
    }
    buffer[0]='\0';
    //The receiving functions
    status = recv(sock, buffer, BUFFER_SIZE, 0);
    if (status == -1) {
        printf("Error in recv(). Error code: %d\n", WSAGetLastError());
        continue;
    }
    buffer[status] = '\0';
    printf("The message received is: ");
    printf("%s\n\n", buffer);

    strcpy(buffer,"GET /mywebsite/login.html/ HTTP1.1\n\n");
    strcat(buffer,"Host: localhost\n\n");
    strcat(buffer,"Authorization: Basic QWRtaW46MTIzNA== \n\n");
    strcat(buffer,"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\n\n");
    strcat(buffer,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8\n\n");
    strcat(buffer,"Accept-Encoding: gzip,deflate,sdch\n\n");
    strcat(buffer,"Accept-Language: en-US,en;q=0.8\n\n");
    strcat(buffer,"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\n\n");
    strcat(buffer,"Connection: keep-alive\n\n");
    status = send(sock, buffer, strlen(buffer), 0);
    if(status == -1) {
        printf("Error in send(). Error code: %d\n", WSAGetLastError());
        continue;
    }
    buffer[0]='\0';
    //The receiving functions
    status = recv(sock, buffer, BUFFER_SIZE, 0);
    if (status == -1) {
        printf("Error in recv(). Error code: %d\n", WSAGetLastError());
        continue;
    }
    buffer[status] = '\0';
    printf("%s\n\n", buffer);
    buffer[0]='\0';

}**

最初のヘッダーは正常に送信されますが、サーバーが何もしない(応答なし)次のヘッダーはここで少し助けてください私は問題が何であるかについての手がかりを持っていません... :(

4

1 に答える 1

2

いくつかの明らかな問題があります:

  • ヘッダーは「\n\n」ではなく「\r\ n」で区切り、最後に「\ r \ n \ r\n」で終わる必要があります。
  • sendrecverrno==EINTRで再試行する必要があります
  • send要求されたよりも少ないバイトを送信する可能性があるため、すべてのデータが確実に転送されるようにループで使用する必要があります。
于 2013-01-04T17:02:24.917 に答える