C HTTPS请求在recv上返回0,HTTP有效

时间:2016-08-25 03:16:20

标签: c++ sockets https client

我正在用C ++编写一个简单的下载程序,它可以在向端口80发出HTTP请求时正常工作,但现在我一直在尝试更新代码以从HTTPS发出请求和下载文件,而我的recv方法总是返回长度为0。我尝试以不同的方式更改标头并使用Postman验证它,这些标头工作正常。不要理解发生了什么。

在我的代码中,我首先向服务器发送HEAD请求,以找出要下载的文件的大小,甚至HEAD请求也不会回来

这是我的sendRequest方法

void Client::sendRequest() {

ptr = request.c_str();
nleft = request.length();
// write the data to the server
while (nleft) {
    if ((nwritten = send(s, ptr, nleft, 0)) < 0) {
        if (errno == EINTR) {
            // the socket call was interrupted -- try again
            nwritten = 0;
        } else {
            // an error occurred, so break out
            perror("write");
            break;
        }
    } else if (nwritten == 0) {
        cout << "the socket is closed" << endl;
        // the socket is closed
        break;
    }
    nleft -= nwritten;
    ptr += nwritten;
 }
}

发送请求后,我正在阅读此方法中的响应:

string Client::readResponse() {
// read the response
char buf[1024];
memset(buf, 0, 1024);
string downloaded;

while (true) {
    long nread = recv(s, buf, 1024, 0);
    downloaded.append(buf, nread);
    if(downloaded.size() != 0) {
        //check for \r\n\r\n to know it's the end of the header
        if (downloaded.at(downloaded.length() - 1) == 10
            && downloaded.at(downloaded.length() - 3) == 10) {
            break;
        }
    }

 }
 return downloaded;
}
对于使用HTTPS的网址上的HEAD请求,

nread始终返回0(例如&#34; https://medpix.nlm.nih.gov/images/full/synpic54731.jpg&#34;)。 真的不确定发生了什么。 要求http://services.hanselandpetal.com/selfie%20dogs-488938505.jpg

的标题
"HEAD /selfie%20dogs-488938505.jpg HTTP/1.1\r\nHost: services.hanselandpetal.com\r\n\r\n"   

请求上面的https网址的标题:

"HEAD /images/full/synpic54731.jpg HTTP/1.1\r\nHost: medpix.nlm.nih.gov\r\n\r\n"    

0 个答案:

没有答案