2 renwenhao123456 renwenhao123456 于 2016.09.15 12:30 提问

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个回答

Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.15 18:07

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!