首页
社区
课程
招聘
未解决 [求助]-关于WinHttp Post发包疑惑
发表于: 2020-6-10 09:13 15434

未解决 [求助]-关于WinHttp Post发包疑惑

2020-6-10 09:13
15434

感谢大佬抽出时间来进来看帖子

string Buffer;
    HINTERNET hSession = 0, hConnect = 0, hRequest = 0;

    if (WinHttpCheckPlatform())
    {
        hSession = WinHttpOpen(L"Mozilla/5.0 (Windows NT 6.1; Win64; x64)", WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, NULL);
        if (hSession)
        {
            WinHttpSetTimeouts(hSession, 3000, 3000, 3000, 3000);
            hConnect = WinHttpConnect(hSession, L"baidu.com", 80, NULL);
            if (hConnect)
            {
                wstring Temp = L"/api/";
                Temp += name;
                hRequest = WinHttpOpenRequest(hConnect, L"POST", Temp.c_str(), NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, NULL);
                if (hRequest)
                {
                    WinHttpAddRequestHeaders(hRequest, L"Accept: */*", -1, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE);
                    WinHttpAddRequestHeaders(hRequest, L"Accept-Language: zh-cn", -1, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE);
                    WinHttpAddRequestHeaders(hRequest, L"Content-Type: application/x-www-form-urlencoded; charset=GBK", -1, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE);
                    WinHttpAddRequestHeaders(hRequest, L"Cache-Control: no-cache", -1, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE);
                    if (WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, -1, (LPVOID)data.c_str(), (DWORD)data.length(), (DWORD)data.length(), NULL))
                    {

在C++控制台上可以正常发包

 

在DLL里调用失败 错误码:139F(HEX) - 5023(DEC)

 

翻遍 Baidu Google 才找到一个类似的
但也没有成功解决

 

还请有经验的大佬解惑


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-6-10 09:46 被寻她梦编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (13)
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
控制台可以,没理由DLL里头不行,你看看错误码对应的描述是啥。
2020-6-10 09:21
0
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
kongfubull 控制台可以,没理由DLL里头不行,你看看错误码对应的描述是啥。
(5023)- 组或资源的状态不是执行请求操作的正确状态。
2020-6-10 09:30
0
雪    币: 3057
活跃值: (3101)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
是不是没初始化网络资源
2020-6-10 09:42
0
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小调调 是不是没初始化网络资源
应该是初始化了
控制台没问题
源码已奉上
还请看看是什么问题
2020-6-10 09:47
0
雪    币: 6557
活跃值: (3857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
刚刚开始学习编程的时候也遇到了这个问题。我当时菜鸡一个搞了大概一星期左右。感慨啊。
2020-6-10 10:52
0
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
zhatian 刚刚开始学习编程的时候也遇到了这个问题。我当时菜鸡一个搞了大概一星期左右。感慨啊。

那搞定了吗
2020-6-10 11:16
0
雪    币: 6557
活跃值: (3857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我搞了7年了,你说呢。 我说我没搞定你信吗?
2020-6-10 14:58
0
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
zhatian 我搞了7年了,你说呢。 我说我没搞定你信吗?
大佬
求助下
2020-6-10 16:01
0
雪    币: 1765
活跃值: (1811)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
DLL中记得需要新建线程来做初始化,不能直接初始化
2020-6-10 16:23
0
雪    币: 498
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
LeePson DLL中记得需要新建线程来做初始化,不能直接初始化
DLL中新建线程 我记得不能直接创建线程 会死锁
而且 新的线程似乎要在DLLmain执行完后 才会调用
2020-6-10 16:38
0
雪    币: 182
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我同样也遇到了一样的问题
2022-2-18 17:09
0
雪    币: 182
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
解决了,需要创建线程,在线程中调用即可,同时也解决了一个使用了某个com组件导致卡死的问题
最好大部分初始化操作都放在线程中调用
2022-2-18 18:07
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
链接:
https://docs.microsoft.com/en-gb/windows/win32/dlls/dynamic-link-library-best-practices 

You should never perform the following tasks from within DllMain:

Call LoadLibrary or LoadLibraryEx (either directly or indirectly). This can cause a deadlock or a crash.
Call GetStringTypeA, GetStringTypeEx, or GetStringTypeW (either directly or indirectly). This can cause a deadlock or a crash.
Synchronize with other threads. This can cause a deadlock.
Acquire a synchronization object that is owned by code that is waiting to acquire the loader lock. This can cause a deadlock.
Initialize COM threads by using CoInitializeEx. Under certain conditions, this function can call LoadLibraryEx.
Call the registry functions.
Call CreateProcess. Creating a process can load another DLL.
Call ExitThread. Exiting a thread during DLL detach can cause the loader lock to be acquired again, causing a deadlock or a crash.
Call CreateThread. Creating a thread can work if you do not synchronize with other threads, but it is risky.
Create a named pipe or other named object (Windows 2000 only). In Windows 2000, named objects are provided by the Terminal Services DLL. If this DLL is not initialized, calls to the DLL can cause the process to crash.
Use the memory management function from the dynamic C Run-Time (CRT). If the CRT DLL is not initialized, calls to these functions can cause the process to crash.
Call functions in User32.dll or Gdi32.dll. Some functions load another DLL, which may not be initialized.
Use managed code.
2022-8-24 10:17
0
游客
登录 | 注册 方可回帖
返回
//