C++实现Http Post请求

参考资料:

http://apps.hi.baidu.com/share/detail/39003388

http://blog.csdn.net/yc0188/article/details/4741871

http://bbs.chinaunix.net/thread-2094334-1-1.html

//头文件

#include <iostream>
#include <string>
#include <Winsock2.h>

using namespace std;

//函数声明

int request(char* hostname, char* api, char* parameters);

//方法调用

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: MFC initialization failed\n"));
        return 1;
    }
    
    request("reg.163.com", "http://reg.163.com/CheckUser.jsp", "test");

    return nRetCode;
}

//函数实现
int request(char* hostname, char* api, char* parameters)
{
    WSADATA WsaData;
    WSAStartup(0x0101, &WsaData);

    //初始化socket
    struct hostent* host_addr = gethostbyname(hostname);
    if (host_addr == NULL)
    {
        cout<<"Unable to locate host"<<endl;
        return -103;
    }

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

    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1)
    {
        return -100;
    }

    //建立连接
    if (connect(sock, (const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1)
    {
        cout<<"connect failed"<<endl;
        return -101;
    }

    //初始化发送信息
    char send_str[2048] = {0};

    //头信息
    strcat(send_str, "POST ");
    strcat(send_str, api);
    strcat(send_str, " HTTP/1.1\r\n");
    strcat(send_str, "Host: ");
    strcat(send_str, hostname);
    strcat(send_str, "\r\n");
    strcat(send_str, "Connection: keep-alive\r\n");

    char content_header[100];
    sprintf(content_header,"Content-Length: %d\r\n", strlen(parameters));

    strcat(send_str, content_header);
    strcat(send_str, "Cache-Control: max-age=0\r\n");
    strcat(send_str, "Origin: http://www.hao123.com\r\n");
    strcat(send_str, "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/15.0.849.0 Safari/535.1\r\n");
    strcat(send_str, "Content-Type: application/x-www-form-urlencoded\r\n");
    strcat(send_str, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
    strcat(send_str, "Referer: http://www.hao123.com/\r\n");
    strcat(send_str, "Accept-Encoding: gzip,deflate,sdch\r\n");
    strcat(send_str, "Accept-Language: zh-CN,zh;q=0.8\r\n");

    //内容信息
    strcat(send_str, "\r\n");
    strcat(send_str, parameters);

    if (send(sock, send_str, strlen(send_str),0) == -1)
    {
        cout<<"send failed"<<endl;
        return -101;
    }

    //获取返回信息
    char recv_str[4096] = {0};
    if (recv(sock, recv_str, sizeof(recv_str), 0) == -1)
    {
        cout<<"recv failed"<<endl;
        return -101;
    }

    cout<<recv_str<<endl;

    WSACleanup( );

    return 0;
}

时间: 2024-10-27 21:49:18

C++实现Http Post请求的相关文章

process-Widget启动报异常。请求解决

问题描述 Widget启动报异常.请求解决 Unable to launch app or broadcast Intent process is bad act=android.appwidget.action.APPWIDGET_ENABLED 怎么回事啊!!! 开始还好好的,后来不晓得怎么了,装widget一直报这个错,不晓得抽什么风, 网上说神马卸掉重装,卸掉关机重启重装,统统都不行.... 解决方案 http://stackoverflow.com/questions/3253676/

提高流量转化:行为请求按钮设计6大必杀技

This is where the rubber meets the road. 行为请求按钮在网页流量转化成商业价值的过程中起了多大的作用呢? 网站的用户体验设计师或许明白行为请求按钮在该转化中的重要作用,但是接下来要讲的6个因素,每一个想从网站获取商业利益的人都应该了解. 什么是行为请求按钮呢? 行为请求按钮是可以从网络访问者那获取点击行为的按钮. 一般来说,一个点击行为可能会链接到下载.注册或出售.它们也可能会把用户引向一个有更多信息的网页从而让用户采取行动(比如:了解更多--) 行为请求

[EntLibFAQ]“不允许所请求的注册表访问权”的解释[0508Update]

[EntLibFAQ]"不允许所请求的注册表访问权"的解释 Version Date Creator Description 1.0.0.1 2006-5-2 郑昀@Ultrapower 草稿   继续阅读之前,我们假设您熟悉以下知识: n         Microsoft Enterprise Library June 2005 n         EventLog和注册表的关系  [现象] 首先,这种情况发生在第一次使用Microsoft Enterprise Library J

断点续传-请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据

问题描述 请问perl是否可以改写nginx服务器得到的POST请求地址,并且不能丢失post的数据 场景:后端JAVA应用作了一个断点续传的功能,测试OK,由于一些环境限制原因,前端必须用nginx转发.坑爹的是nginx的rewrite功能会把post请求变为get请求,如果使用 proxy pass则会出现如果用户上传中断,nginx不会把已经上传的东西扔给后端应用 现在考虑方向是改写post请求的链接(改成IP加端口)但是不更改别的东西,比如post的数据,方法等等,或者干脆收到此种请求

tomcat启动报错-同一项目在我的电脑上启动报错(缺少jar包,其实是有的),但在别人的电脑上却能正常启动,请求帮助

问题描述 同一项目在我的电脑上启动报错(缺少jar包,其实是有的),但在别人的电脑上却能正常启动,请求帮助 解决方案 如果是这样,那说明你引入的有问题啊, 1. 重新引入jar一下!!!对着jar右键add- 2. clean一下!!! 3. 重新发布项目 解决方案二: web项目直接放在lib文件夹下,就不需要add了吧, 此外,这项目在别的电脑可以正常运行 解决方案三: 有可能是jar包没有引入,在build path 把项目所有jar包都引进去 解决方案四: 谢谢各位,问题已解决.缘由是t

wcf 报内部错误,无法处理该请求。怀疑是sql的问题

问题描述 wcf 报内部错误,无法处理该请求.怀疑是sql的问题 用.net 4.0 + mysql写WCF的事务处理例子. 不加sql相关的东西都没问题. 加上就报内部错误,而且没有详细错误,也不知道为什么,我在配置文件开了debug,并且都加try了,还是没有详细信息. 测试了好几次,就怀疑是SQL的这部分有问题,但是我还看不出哪里的问题.请教. [OperationBehavior(TransactionScopeRequired=true)] public void intoMoney(

xml-携程api接口请求成功返回的String数据怎样拿来使用

问题描述 携程api接口请求成功返回的String数据怎样拿来使用 携程官网提供的java方法,配置好后,请求成功,返回的是xml形式的一串String类型的字符串,怎么才能拿来使用? 解决方案 用xml解析库,或者反序列化成对象后就可以用了. 解决方案二: 用xml解析库,或者反序列化成对象后就可以用了. 解决方案三: google java xml解析.http://bbs.csdn.net/topics/290027113 http://developer.51cto.com/art/20

Nginx 内置变量,细化规则,真实IP获取及限制连接请求

希望下周测试之后能用起来!!!感觉很有用的. http://www.bzfshop.net/article/176.html http://www.cr173.com/html/19761_1.html http://blog.pixelastic.com/2013/09/27/understanding-nginx-location-blocks-rewrite-rules/ 你 Google 不到的配置   很多时候,我们的网站不是简单的  普通用户IE浏览器  --->  你的服务器  的

利用WPCAP函数,模拟ARP请求数据包,发送并监听ARP回复响应[转]

using System; using System.Collections.Generic; using System.Linq; using System.Text; using SharpPcap; using SharpPcap.Protocols; using SharpPcap.Packets; using SharpPcap.Util; using System.Net; namespace ArpSender {     class Program     {         s

多次请求会创建多个request对象吗?

问题描述 多次请求会创建多个request对象吗? 两种情况:1)我多次向同一应用发送不同请求2)多人向同一应用发送请求 解决方案 两种情况都会创建多个request. 解决方案二: http有keepalive