使用Wininet发送多个Http请求
问题描述:
所以我做了这个简单的例子:我发送一个客户端PC上执行一个php脚本在树莓派上的http请求来计算一个目录中的文件数,然后执行一个php的第二个请求脚本删除它们,然后再次运行第一个脚本以确保其正常工作。使用Wininet发送多个Http请求
问题是我第二次询问文件的数量时,它返回第一次调用函数的结果,还有脚本删除了工作的文件。我在网络上使用wireshark,并且实际上看到第二次请求计数文件未发送,我不明白为什么,它是我的代码?或从http protocole?
这里是我的代码,只存在2个请求计数的ADL文件的数量,只有有了这个,我可以在Wireshark的,只是在请求发送看到:
#include "MA_DLLCPP.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <wininet.h>
#include <string.h>
int main(int argc, char* argv[])
{
int error = 0;
char* result = 0;
DWORD dwBytes;
char ch [100] = "0";
char ligne [100] = "";
char ligne1 [100] = "";
HINTERNET Initialize,Connection,File;
//Création de la session internet
Initialize = InternetOpenA("pi",INTERNET_OPEN_TYPE_DIRECT,"","",0);
if(Initialize == NULL) return 1;
//Connection HTTP serveur-client
Connection = InternetConnectA(Initialize,"192.168.1.2",INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
strcat(ligne, "IHM_DLD/services/");
strcat(ligne, "getADL");
strcat(ligne, ".php");
//Création de la requete HTTP
File = HttpOpenRequestA(Connection, "GET",ligne,NULL,NULL,NULL,0,0);
if(File == NULL) return 3;
//Envoi de la requete HTTP
if(HttpSendRequestA(File,NULL,0,NULL,0) == FALSE) return 4;
//Lecture de la réponse du serveur
if(InternetReadFile(File,&ch,1,&dwBytes) == FALSE) return 5;
while(InternetReadFile(File,&ch,1,&dwBytes))
{
// cas d'erreur en cas d'absence de retour
if(dwBytes != 1) break;
printf("%s",ch);
}
InternetCloseHandle(File);
InternetCloseHandle(Connection);
InternetCloseHandle(Initialize);
//Connection HTTP serveur-client
Connection = InternetConnectA(Initialize,"192.168.1.2",INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
//Création de la requete HTTP
File = HttpOpenRequestA(Connection, "GET",ligne,NULL,NULL,NULL,0,0);
if(File == NULL) return 3;
//Envoi de la requete HTTP
if(HttpSendRequestA(File,NULL,0,NULL,0) == FALSE) return 4;
//Lecture de la réponse du serveur
if(InternetReadFile(File,&ch,1,&dwBytes) == FALSE) return 5;
while(InternetReadFile(File,&ch,1,&dwBytes))
{
// cas d'erreur en cas d'absence de retour
if(dwBytes != 1) break;
printf("%s",ch);
}
InternetCloseHandle(File);
InternetCloseHandle(Connection);
InternetCloseHandle(Initialize);
答
听起来像一个chaching effect到我。第二次在您的机器上本地处理请求。
我从来没有使用过,但经过INTERNET_FLAG_NO_CACHE_WRITE
的HttpOpenRequest
的dwFlags
参数中看起来像它应该做的伎俩......