1

GET/POST リクエストを作成しようとしています。とりあえずGETリクエスト。接続を確立することはできますが、200 OK という応答が得られません。ここにコードがあります

   int socketFD;
    struct sockaddr_in myaddr;
    //    struct sockaddr_in hints;
    socketFD = socket(AF_INET, SOCK_STREAM, 0);
    if (socketFD == -1) {
        NSLog(@"Error in making socket");
    }      
    myaddr.sin_port = htons(80);
    memset(&myaddr.sin_zero, '\0', 8);


    char *sendbug = "GET 173.194.66.99 HTTP/1.0\r\n\r\n";


    struct sockaddr_in dest,their_addr;
    //    struct addrinfo *res;
    struct sockaddr sockAddrToDisplay;

    dest.sin_family = AF_INET;
    dest.sin_port = htons(80);
    NSLog(@"%s",sendbug);
    dest.sin_addr.s_addr = inet_addr("173.194.66.99"); // IP for google


    int connectResult =    connect(socketFD, (struct sockaddr *)&dest, sizeof(struct sockaddr));

    if (connectResult == -1) {
        NSLog(@"Error connecting");
    }

    int sendResult =   sendto(socketFD, sendbug, strlen(sendbug), 0, (struct sockaddr *)&dest, sizeof(struct sockaddr));

    if (sendResult == -1) {
        NSLog(@"Sendind failed");
    }

    //    int peerResult =    getpeername(socketFD, (struct sockaddr *)&dest,(socklen_t *) sizeof(struct sockaddr));


    struct addrinfo hints, *res;
    int sockfd;
    int byte_count;
    socklen_t fromlen;
    struct sockaddr_storage addr;
    char buf[512];
    char ipstr[INET6_ADDRSTRLEN];


    fromlen = sizeof addr;
    byte_count = recvfrom(socketFD, buf, sizeof buf, 0,(struct sockaddr *) &addr, &fromlen);

    NSLog(@"%s",buf);

そして、応答。私が間違っているところと、http POST リクエストを作成する方法について、助けが必要です。thx事前にフェロー

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.3.7</center>
</body>
</html>
∑¥ëXnr
4

1 に答える 1

4

あなたの問題はここにあります:

char *sendbug = "GET 173.194.66.99 HTTP/1.0\r\n\r\n";

HTTP プロトコルは、リクエストを として定義します<method> <resource> [HTTP/<version>]。バージョンのデフォルトは 1.0 で、1.0 では最後に改行が 1 つだけ必要で、要求しているリソースはホームページなので、次のようになります。

char *sendbug = "GET /\r\n";

カスタムクライアントを実装しようとしている場合は、HTTP-RFC を読むことをお勧めします。これは、POST リクエストの作成にも役立つはずです。また、HTTP/1.1 にアップグレードしてください。すべての Web サーバーが 1.0 をサポートする義務を負っているわけではありません。

RFC 2616 - ハイパーテキスト転送プロトコル -- HTTP/1.1

于 2013-04-29T10:48:31.737 に答える