非正式程序猿 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 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝