|
发表于 2016-6-8 10:52:27
|
显示全部楼层
山西省临汾市
- #include <iostream>
- #include <Winsock2.h>
- #include <string>
- using namespace std;
- #pragma comment(lib, "Ws2_32.lib")
- typedef struct tagRequest
- {
- int port;
- string addr;
- string host;
- string msg;
- } REQUEST;
- int InitSocket();
- char* HttpGet(REQUEST get);
- char* HttpPost(REQUEST post);
复制代码
- #include "HttpRequest.h"
- int InitSocket()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD(2, 2);
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != 0) {
- /* Tell the user that we could not find a usable */
- /* WinSock DLL. */
- return 0;
- }
- /* Confirm that the WinSock DLL supports 2.2.*/
- /* Note that if the DLL supports versions greater */
- /* than 2.2 in addition to 2.2, it will still return */
- /* 2.2 in wVersion since that is the version we */
- /* requested. */
- if (LOBYTE(wsaData.wVersion) != 2 ||
- HIBYTE(wsaData.wVersion) != 2) {
- /* Tell the user that we could not find a usable */
- /* WinSock DLL. */
- WSACleanup();
- return 0;
- }
- /* The WinSock DLL is acceptable. Proceed. */
- return 1;
- }
- char* HttpPost(REQUEST post)
- {
-
- const char* addr = post.addr.c_str();
- const char* host = post.host.c_str();
- int port = post.port;
- const char* msg = post.msg.c_str();
- char* pHttpPost =
- "POST %s HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
- "Content-Type: application/x-www-form-urlencoded\r\n"
- "Content-Length: %d\r\n\r\n"
- "%s";
- char strHttpPost[1024] = { 0 };
- sprintf(strHttpPost, pHttpPost, addr, host, port, strlen(msg), msg);
- InitSocket();
- struct hostent* lpUrl = gethostbyname(host);
- if (NULL == lpUrl)
- return " ";
- SOCKET sockClt = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_family = AF_INET;
- addrSrv.sin_port = htons(80);
- addrSrv.sin_addr.S_un.S_addr = *((unsigned long*)lpUrl->h_addr);
- connect(sockClt, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
- send(sockClt, strHttpPost, strlen(strHttpPost), 0);
- char szRecvBuf[1024] = {0};
- recv(sockClt, szRecvBuf, 1024, 0);
- closesocket(sockClt);
- WSACleanup();
- return szRecvBuf;
- }
- char* HttpGet(REQUEST get)
- {
- const char* addr = get.addr.c_str();
- const char* host = get.host.c_str();
- int port = get.port;
- const char* msg = get.msg.c_str();
- char *pHttpGet = "GET %s?%s HTTP/1.1\r\n"
- "Host: %s:%d\r\n\r\n";
- char strHttpGet[1024] = { 0 };
- sprintf(strHttpGet, pHttpGet, addr, msg, host, port);
- InitSocket();
- struct hostent* lpUrl = gethostbyname(host);
- if (NULL == lpUrl)
- return "";
- SOCKET sockClt = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_family = AF_INET;
- addrSrv.sin_port = htons(80);
- addrSrv.sin_addr.S_un.S_addr = *((unsigned long*)lpUrl->h_addr);
- connect(sockClt, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
- send(sockClt, strHttpGet, strlen(strHttpGet), 0);
- char szRecvBuf[1024] = {0};
- recv(sockClt, strHttpGet, strlen(strHttpGet), 0);
- closesocket(sockClt);
- WSACleanup();
- return szRecvBuf;
- }
复制代码
- #include "HttpRequest.h"
- int main(void)
- {
- REQUEST reqPost;
- reqPost.addr = "http://bbs.pediy.com/login.php?do=login";
- reqPost.host = "bbs.pediy.com";
- reqPost.msg = "vb_login_username=XX&"
- "cookieuser=1&"
- "vb_login_password=&"
- "s=&"
- "securitytoken=guest&"
- "do=login&vb_login_md5password=xxxxxxxxxxxxxxx&"
- "vb_login_md5password_utf=xxxxxxxxxxxxxxx";
- HttpPost(reqPost);
- return 0;
- }
复制代码
我自己分装的 凑合用吧 还不完善懒得完善了。。 可以拿来学习一下原理 |
|