VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 222|回复: 5

[求助] 使用WinSock发送httpGET请求出错

[复制链接]
97_avatar_middle
在线会员 李乐辉 发表于 2018-10-11 18:12:20 | 显示全部楼层 |阅读模式
30驿站币
难道发送的协议编码不对?
  1. #include<WinSock2.h>
  2. #include<WS2tcpip.h>
  3. #include<Windows.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>


  6. #pragma comment(lib,"ws2_32.lib")
  7. int sock_send(SOCKET serSocket);
  8. int sock_open(LPSTR lpHost, int iprot);
  9. void InitWSA();
  10. void InitWSA()
  11. {
  12.     WSADATA wsaData;
  13.     WSAStartup(MAKEWORD(2, 2), &wsaData);
  14. }

  15. int sock_open(LPSTR lpHost, int iprot)
  16. {

  17.     SOCKET Socket;
  18.     sockaddr_in SerAddr;
  19.     int Error = 0;
  20.     int iLen = sizeof(SerAddr);
  21.     ZeroMemory(&SerAddr, iLen);
  22.     SerAddr.sin_family = AF_INET;
  23.     SerAddr.sin_addr.S_un.S_addr = inet_addr(lpHost);
  24.     SerAddr.sin_port = htons(iprot);

  25.     Socket = socket(AF_INET, SOCK_STREAM, 0);
  26.     if (Socket == INVALID_SOCKET)
  27.          {
  28.              Error = WSAGetLastError();
  29.              printf("\n%s(%d)", "套接字创建失败!",Error);
  30.          }
  31.       else
  32.          {
  33.               printf("\n%s", "套接字创建成功!");
  34.          }
  35.       if (connect(Socket, (sockaddr *)&SerAddr, iLen) == SOCKET_ERROR)
  36.           {
  37.               Error = WSAGetLastError();
  38.               printf("\n%s(%d)", "链接服务器失败!", Error);
  39.            }
  40.       else
  41.              {
  42.                   printf("\n%s", "链接服务器成功!");
  43.                   sock_send(Socket);
  44.              }
  45.       closesocket(Socket);
  46.       WSACleanup();
  47.       system("pause");
  48.       return Error;
复制代码


使用WinSock发送httpGET请求出错

最佳答案

查看完整内容

sock_send 中的: 改成 就可以了,少了一对 \r\n




上一篇:链表问题
下一篇:64位程序如何使用VMP加密

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-10-11 18:12:21 | 显示全部楼层
李乐辉 发表于 2018-10-12 14:56
试啦没成功,是不是我的协议格式错了

sock_send 中的:
  1. char szRequest[4096] = { "GET http://www.cctry.com/ HTTP/1.1\r\nHost: www.cctry.com\r\nConnection: keep-alive\r\n" };
复制代码

改成
  1. char szRequest[4096] = { "GET http://www.cctry.com/ HTTP/1.1\r\nHost: www.cctry.com\r\nConnection: keep-alive\r\n\r\n" };
复制代码

就可以了,少了一对 \r\n

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

97_avatar_middle
ico_lz  楼主| 李乐辉 发表于 2018-10-11 18:14:41 | 显示全部楼层
  1. #include<WinSock2.h>
  2. #include<WS2tcpip.h>
  3. #include<Windows.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>


  6. #pragma comment(lib,"ws2_32.lib")
  7. int sock_send(SOCKET serSocket);
  8. int sock_open(LPSTR lpHost, int iprot);
  9. void InitWSA();
  10. void InitWSA()
  11. {
  12.         WSADATA wsaData;
  13.         WSAStartup(MAKEWORD(2, 2), &wsaData);
  14. }

  15. int sock_open(LPSTR lpHost, int iprot)
  16. {

  17.         SOCKET Socket;
  18.         sockaddr_in SerAddr;
  19.         int Error = 0;
  20.         int iLen = sizeof(SerAddr);
  21.         ZeroMemory(&SerAddr, iLen);
  22.         SerAddr.sin_family = AF_INET;
  23.         SerAddr.sin_addr.S_un.S_addr = inet_addr(lpHost);
  24.         SerAddr.sin_port = htons(iprot);

  25.         Socket = socket(AF_INET, SOCK_STREAM, 0);
  26.         if (Socket == INVALID_SOCKET)
  27.         {
  28.                 Error = WSAGetLastError();
  29.                 printf("\n%s(%d)", "套接字创建失败!",Error);
  30.         }
  31.         else
  32.         {
  33.                 printf("\n%s", "套接字创建成功!");
  34.         }

  35.         if (connect(Socket, (sockaddr *)&SerAddr, iLen) == SOCKET_ERROR)
  36.         {
  37.                 Error = WSAGetLastError();
  38.                 printf("\n%s(%d)", "链接服务器失败!", Error);
  39.         }
  40.         else
  41.         {
  42.                 printf("\n%s", "链接服务器成功!");

  43.                 sock_send(Socket);
  44.         }

  45.         closesocket(Socket);
  46.         WSACleanup();
  47.         system("pause");
  48.         return Error;
  49. }
  50. int sock_send(SOCKET serSocket)
  51. {
  52.         char szRequest[4096] = {"GET http://192.168.0.102/ HTTP/1.1\r\nHost: 192.168.0.102\r\nConnection : keep - alive\r\n"};
  53.         printf("\n%s\r\n%s", "Request: ", szRequest);
  54.         int Error = 0;
  55.         if (send(serSocket,szRequest,4096,0) == SOCKET_ERROR)
  56.         {
  57.                 Error = WSAGetLastError();
  58.                 printf("\n%s(%d)", "客户端Requtst失败!", Error);
  59.         }
  60.         else
  61.         {
  62.                
  63.                 char recvBuf[4096] = {0};
  64.                 if (recv(serSocket, recvBuf, 4096, 0) == SOCKET_ERROR)
  65.                 {
  66.                         Error = WSAGetLastError();
  67.                         printf("\n%s(%d)", "客户端Response失败!", Error);
  68.                 }
  69.                 else
  70.                 {
  71.                         printf("\n%s\r\n%s", "Response: ", recvBuf);
  72.                 }
  73.                
  74.         }

  75.         closesocket(serSocket);
  76.         return Error;
  77. }

  78. char * GetURLtoIP(char *ptr)
  79. {
  80.         addrinfo hints, *result;
  81.         sockaddr_in  *serAddr;
  82.         ZeroMemory(&hints, sizeof(hints));
  83.         hints.ai_family = AF_INET;
  84.         hints.ai_protocol = IPPROTO_TCP;
  85.         hints.ai_socktype = SOCK_STREAM;

  86.        
  87.         getaddrinfo(ptr,NULL, &hints, &result);
  88.         serAddr = (sockaddr_in  *)result->ai_addr;
  89.         return inet_ntoa(serAddr->sin_addr);
  90.        
  91. }



  92. int main()
  93. {
  94.         InitWSA();
  95.         char szHost[32] = {"192.168.0.102"};
  96.         //GetURLtoIP(&szHost);
  97.         printf("%s", szHost);
  98.         sock_open(szHost, 80);
  99.        
  100.         system("pause");
  101.         return 0;
  102. }#include<WinSock2.h>
  103. #include<WS2tcpip.h>
  104. #include<Windows.h>
  105. #include<stdio.h>
  106. #include<stdlib.h>


  107. #pragma comment(lib,"ws2_32.lib")
  108. int sock_send(SOCKET serSocket);
  109. int sock_open(LPSTR lpHost, int iprot);
  110. void InitWSA();
  111. void InitWSA()
  112. {
  113.         WSADATA wsaData;
  114.         WSAStartup(MAKEWORD(2, 2), &wsaData);
  115. }

  116. int sock_open(LPSTR lpHost, int iprot)
  117. {

  118.         SOCKET Socket;
  119.         sockaddr_in SerAddr;
  120.         int Error = 0;
  121.         int iLen = sizeof(SerAddr);
  122.         ZeroMemory(&SerAddr, iLen);
  123.         SerAddr.sin_family = AF_INET;
  124.         SerAddr.sin_addr.S_un.S_addr = inet_addr(lpHost);
  125.         SerAddr.sin_port = htons(iprot);

  126.         Socket = socket(AF_INET, SOCK_STREAM, 0);
  127.         if (Socket == INVALID_SOCKET)
  128.         {
  129.                 Error = WSAGetLastError();
  130.                 printf("\n%s(%d)", "套接字创建失败!",Error);
  131.         }
  132.         else
  133.         {
  134.                 printf("\n%s", "套接字创建成功!");
  135.         }

  136.         if (connect(Socket, (sockaddr *)&SerAddr, iLen) == SOCKET_ERROR)
  137.         {
  138.                 Error = WSAGetLastError();
  139.                 printf("\n%s(%d)", "链接服务器失败!", Error);
  140.         }
  141.         else
  142.         {
  143.                 printf("\n%s", "链接服务器成功!");

  144.                 sock_send(Socket);
  145.         }

  146.         closesocket(Socket);
  147.         WSACleanup();
  148.         system("pause");
  149.         return Error;
  150. }
  151. int sock_send(SOCKET serSocket)
  152. {
  153.         char szRequest[4096] = {"GET http://192.168.0.102/ HTTP/1.1\r\nHost: 192.168.0.102\r\nConnection : keep - alive\r\n"};
  154.         printf("\n%s\r\n%s", "Request: ", szRequest);
  155.         int Error = 0;
  156.         if (send(serSocket,szRequest,4096,0) == SOCKET_ERROR)
  157.         {
  158.                 Error = WSAGetLastError();
  159.                 printf("\n%s(%d)", "客户端Requtst失败!", Error);
  160.         }
  161.         else
  162.         {
  163.                
  164.                 char recvBuf[4096] = {0};
  165.                 if (recv(serSocket, recvBuf, 4096, 0) == SOCKET_ERROR)
  166.                 {
  167.                         Error = WSAGetLastError();
  168.                         printf("\n%s(%d)", "客户端Response失败!", Error);
  169.                 }
  170.                 else
  171.                 {
  172.                         printf("\n%s\r\n%s", "Response: ", recvBuf);
  173.                 }
  174.                
  175.         }

  176.         closesocket(serSocket);
  177.         return Error;
  178. }

  179. char * GetURLtoIP(char *ptr)
  180. {
  181.         addrinfo hints, *result;
  182.         sockaddr_in  *serAddr;
  183.         ZeroMemory(&hints, sizeof(hints));
  184.         hints.ai_family = AF_INET;
  185.         hints.ai_protocol = IPPROTO_TCP;
  186.         hints.ai_socktype = SOCK_STREAM;

  187.        
  188.         getaddrinfo(ptr,NULL, &hints, &result);
  189.         serAddr = (sockaddr_in  *)result->ai_addr;
  190.         return inet_ntoa(serAddr->sin_addr);
  191.        
  192. }



  193. int main()
  194. {
  195.         InitWSA();
  196.         char szHost[32] = {"192.168.0.102"};
  197.         //GetURLtoIP(&szHost);
  198.         printf("%s", szHost);
  199.         sock_open(szHost, 80);
  200.        
  201.         system("pause");
  202.         return 0;
  203. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-10-11 21:42:18 | 显示全部楼层

keep - alive 中间不要有空格,去掉试试

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

97_avatar_middle
ico_lz  楼主| 李乐辉 发表于 2018-10-12 14:56:36 | 显示全部楼层
Syc 发表于 2018-10-11 21:42
keep - alive 中间不要有空格,去掉试试

试啦没成功,是不是我的协议格式错了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

97_avatar_middle
ico_lz  楼主| 李乐辉 发表于 7 天前 | 显示全部楼层
Syc 发表于 2018-10-11 18:12
sock_send 中的:

改成

谢谢,成功了之前的网站GET请求也成功了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

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

GMT+8, 2018-10-20 17:45

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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