非正式程序猿 2016-09-15 04:30 采纳率: 42.9%
浏览 3008

python的requests无法定制POST *** HTTP/1.1\r\n

python用requests发包的结果用c++socket发包的结果
同样是发一个包,除了包头的第一行

POST /cgi-bin/do_login HTTP/1.1\r\n

在requests中无法定制,其余均一样,为何c++返回了认证结果,requests却返回了认证界面的html源码?

怀疑是包头第一行的问题,但我也无从下手

如果对c++中的sendpacket函数有疑问,这里贴出代码
```char* sendpacket(char* host_name, char* req)
{

SOCKET hsocket;

SOCKADDR_IN saServer;

WSADATA     wsadata;

LPHOSTENT lphostent;

int     nRet;

if (WSAStartup(MAKEWORD(2, 2), &wsadata))

    printf("初始化SOCKET出错!");

lphostent = gethostbyname(host_name);

if (lphostent == NULL)

    printf("lphostent为空!");

hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

saServer.sin_family = AF_INET;

saServer.sin_port = htons(80);

saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);

// 利用SOCKET连接 

nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));

if (nRet == SOCKET_ERROR)
{

    printf("建立连接时出错!");

    closesocket(hsocket);

    return 0;

}

nRet = send(hsocket, req, strlen(req), 0);//发包

if (nRet == SOCKET_ERROR)

{

    printf("发送数据包时出错!");

    closesocket(hsocket);

}

char   Dest[3000] = { 0 };

nRet = 1;

while (nRet > 0)

{

    // 接收返回数据包 

    nRet = recv(hsocket, (LPSTR)Dest, sizeof(Dest), 0);

    return Dest;
}

}

  • 写回答

1条回答 默认 最新

  • 泰 戈 尔 博客专家认证 2016-09-15 10:07
    关注

    你的data应该现用urllib.urlencode一下吧。不然有些字符无法正确的发送的。

    评论

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛