VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 794|回复: 4

[求助] 为什么c++ socket get请求返回HTTP/1.1 302 Moved

[复制链接]
79_avatar_middle
在线会员 发表于 2016-8-7 23:29:12 | 显示全部楼层 |阅读模式

自己写了一个get 请求函数

函数如下:


  1. int get(const char* host, const char* referer, const char* api, const char* parameters)
  2. {
  3.         WSADATA WsaData;
  4.         WSAStartup(0x0101, &WsaData);

  5.         //初始化socket
  6.         struct hostent* host_addr = gethostbyname(host);
  7.         if (host_addr == NULL)
  8.         {
  9.                 return -103;
  10.         }

  11.         sockaddr_in sin;
  12.         sin.sin_family = AF_INET;
  13.         sin.sin_port = htons((unsigned short)80);
  14.         sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list);

  15.         int sock = socket(AF_INET, SOCK_STREAM, 0);
  16.         if (sock == -1)
  17.         {
  18.                 return -100;
  19.         }

  20.         //建立连接
  21.         if (connect(sock, (const struct sockaddr *)&sin, sizeof(sockaddr_in)) == -1)
  22.         {
  23.                 return -101;
  24.         }

  25.         //初始化发送信息
  26.         char zj_send_str[2048] = { 0 };
  27.         char zj_content_referer[100];
  28.         //头信息

  29.         strcat_s(zj_send_str, "GET ");
  30.         strcat_s(zj_send_str, api);
  31.         strcat_s(zj_send_str, " HTTP/1.1\r\n");
  32.         strcat_s(zj_send_str, "Host: ");
  33.         strcat_s(zj_send_str, host);
  34.         strcat_s(zj_send_str, "\r\n");
  35.         sprintf_s(zj_content_referer, "Referer: %s\r\n", referer);
  36.         strcat_s(zj_send_str, zj_content_referer);

  37.         strcat_s(zj_send_str, "Connection: keep-alive\r\n");
  38.         strcat_s(zj_send_str, "Accept-Encoding: gzip, deflate\r\n");
  39.         strcat_s(zj_send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
  40.         strcat_s(zj_send_str, "Accept-Language: zh-cn\r\n");
  41.         //内容信息
  42.         strcat_s(zj_send_str, "\r\n");
  43.         strcat_s(zj_send_str, parameters);
  44.         strcat_s(zj_send_str, "\r\n");
  45.         strcat_s(zj_send_str, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n");
  46.         strcat_s(zj_send_str, "Connection: keep-alive\r\n");
  47.         strcat_s(zj_send_str, "Cache-Control: max-age=0\r\n");
  48.         strcat_s(zj_send_str, "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69

  49. Safari/601.1\r\n");


  50.         if (send(sock, zj_send_str, strlen(zj_send_str), 0) == -1)
  51.         {
  52.                 return -101;
  53.         }


  54.         //获取返回信息
  55.         memset(recv_str, 0, RECE_DATA_SIZE);

  56.         int sum = recv(sock, recv_str, RECE_DATA_SIZE, 0);

  57.         if (sum == -1)
  58.         {
  59.                 return -101;
  60.         }


  61.         WSACleanup();

  62.         return 0;
  63. }
复制代码


调用如下:

  1. ret = get("qianxiaoka.com", "http://qianxiaoka.com/main/index.html", "/quicktask/index.html","PHPSESSID=070htvaq285342e37rcsuh5du5; qxk_activecode=15636;

  2. qxk_idfa=09C0CC60-50ED-470F-8362-931AFE4D5B36");
复制代码



返回数据是:

HTTP/1.1 302  Moved

正常情况应该返回:

HTTP/1.1 200 OK

请问大家这个问题出在哪里???





上一篇:类导出函数名字改编
下一篇:error2019:IcmpCreateFile和IcmpSendEcho
51_avatar_middle
online_admins 发表于 2016-8-9 16:58:57 | 显示全部楼层
抓下浏览器的包,看看浏览器访问这个页面的时候返回什么,你发送的HTTP请求头跟浏览器的有什么区别?
32_avatar_middle
在线会员 发表于 2016-8-10 11:50:46 | 显示全部楼层
貌似是地址变化了,如果是的话,会在内容里面说明新的地址。你再去请求新的地址
26_avatar_middle
在线会员 发表于 2016-8-10 14:36:13 | 显示全部楼层
PHPSESSID=070htvaq285342e37rcsuh5du5; qxk_activecode=15636;

qxk_idfa=09C0CC60-50ED-470F-8362-931AFE4D5B36
为什么c++ socket get请求返回HTTP/1.1 302 Moved这个是cookie吧,能这么写吗 不是cookie:xxx
47_avatar_middle
在线会员 发表于 2016-8-10 23:02:27 | 显示全部楼层
发送协议不对,抓包就能知道,跟socket无关
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-21 02:48

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表