悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

CInternetSession CHttpFile Post提交数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//给指定url发请求, 返回请求后的结果
string CAutoPatchDlg::SendURLPost(string strServerName, string strFormActionUrl, string strPostStr)
{
    CString strFormData(strPostStr.c_str());    // 需要提交的数据
CInternetsess sess("HttpClient");
 
//连结超时没效果的, 发送超时与接收超时有用, 连结超时可以用多线程WaitForSingleObject来实现
sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000); // 5000毫秒的连接超时
sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000); // 5000毫秒的发送超时
sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000); // 5000毫秒的接收超时
sess.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); // 1次重试
 
    CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // 请求头
    CHttpConnection *pConnection = sess.GetHttpConnection(strServerName.c_str());
    CHttpFile *pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strFormActionUrl.c_str());
     
    CString strSentence, strGetSentence = "";
    if(pFile)
    {
        BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
        while(pFile->ReadString(strSentence))  // 读取提交数据后的返回结果
            strGetSentence = strGetSentence + strSentence + char(13) + char(10);
        pFile->Close();
        delete pFile;
        sess.Close();
        return string(strGetSentence.GetBuffer());
    }
    return "";
}

  

1
2
3
4
5
string strResult = "";
    string strServerName = "www.test.com";
    string strFormActionUrl = "/index.php";
    string strPostData = "username=" + strUserName + "&password=" + strPassword;
strResult = SendURLPost(strServerName, strFormActionUrl, strPostData);

  

这个方法有个缺陷, 网络不通SendRequest会等待几十秒, 感觉像卡死了似的.

posted on   悉野  阅读(6035)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示