Chinaunix

标题: https 发送GET请求 接收不到页面信息【已解决】 [打印本页]

作者: ast_224    时间: 2008-10-14 11:01
标题: https 发送GET请求 接收不到页面信息【已解决】
主要的send和recv代码如下:
.....
.....
sprintf(request, "GET /%s HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\n\
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\n\
Host: %s:%d\r\nConnection: Close\r\n\r\n", host_file, host_addr, portnumber);/*准备request,将要发送给主机*/

    send = 0;
    totalsend = 0;
    nbytes = strlen(request);
    while (totalsend < nbytes)
    {
        send = SSL_write(ssl, request + totalsend, nbytes - totalsend);
        if (send == -1)
        {
                ERR_print_errors_fp(stderr);
                exit(0);
        }
        totalsend += send;
        printf("%d bytes send OK!\n", totalsend);
    }
/* 连接成功了,接收http响应,response */  
if ((iLength=SSL_read(ssl, buffer, MAX_DATA_SIZE)) > 0)
  {
          buffer[iLength]='\0';
        printf("recv :\n%s",buffer);
   }

程序一切正常,但就是通过ssl_read所接收到的打印数据没有页面信息,如同发送HEAD请求一样收到的仅仅是请求页面的首部,
在做http时,通过发送GET请求,用recv()函数就可以将页面信息全部获取
不知问题出在哪啦,望达人解答~~

[ 本帖最后由 ast_224 于 2008-10-15 17:05 编辑 ]
作者: andrew913    时间: 2008-10-14 12:33
标题: 回复 #1 ast_224 的帖子
我不知道,但是顶你一下。
难得一个女生搞程序
作者: gothicane    时间: 2008-10-14 12:45
有可能ssl_read一次并没有读到所有的数据吧,多读几次试试
作者: ast_224    时间: 2008-10-14 13:04
buffer已经设的足够了,试了很多次,都只能读出首部信息
不知SSL_read是不是对接收的数据有限制
在这里似乎GET和HEAD没有什么区别
仍然迷惑中~~
作者: ast_224    时间: 2008-10-14 15:52
有没有和我遇到类似问题的啊
关于ssl_read的接收很迷惑,原本应该会出现在buffer有限的范围类的全部信息的啊
有熟悉OpenSSL的达人路过的话,顺便指定一下哈~·

[ 本帖最后由 ast_224 于 2008-10-14 16:03 编辑 ]
作者: jsean    时间: 2008-10-15 05:16
先抓包看一下,是否对端正确响应了。
作者: ast_224    时间: 2008-10-15 09:37
标题: 回复 #6 jsean 的帖子
包是完整的
有可能是报文的payload部分有0,做为字符串读取就被截断了
还是不闲麻烦单个字符的接收,可以全部获取数据~
3Q~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2