启用脱机工作时,HttpSendRequest返回失败/错误代码2

时间:2013-09-04 10:23:35

标签: http wininet

我尝试使用WinInet发出HTTP请求,HttpSendRequest()有时会返回失败,而其他应用程序和浏览器似乎可以访问互联网。
当我检查GetLastError()时,它会返回2.这不是standard WinInet error codes中的一个,但它可能是Win32 ERROR_FILE_NOT_FOUND

这是多条代码失败但是我可以轻松测试一下:

'Split up the URL into its component parts
URLInfo = SplitURL(URL)
AuthFlags = IIf(URLInfo.lpszUserName = "" And URLInfo.lpszPassword = "", INTERNET_FLAG_NO_AUTH, 0)

'Create the connection to the server
SessionHandle = InternetConnect(InetHandle, URLInfo.lpszHostName, URLInfo.nPort, URLInfo.lpszUserName, URLInfo.lpszPassword, URLInfo.nScheme, AuthFlags, 0)
If SessionHandle = 0 Then
  Err.Raise HTTPErrorInitSession, , "Failed to initialise the HTTP session: " & Cstr(Err.LastDllError)
End If

'Create the request for the resource
RequestHandle = HttpOpenRequest(SessionHandle, IIf(PostData = "", "GET", "POST"), URLInfo.lpszUrlPath & URLInfo.lpszExtraInfo, "HTTP/1.1", vbNullString, vbNullString, INTERNET_FLAG_RELOAD Or INTERNET_FLAG_NO_CACHE_WRITE Or AuthFlags, 0)
If RequestHandle = 0 Then
  Err.Raise HTTPErrorInitRequest, , "Failed to initialise the HTTP request: " & Cstr(Err.LastDllError)
End If

'Send the request
RequestSent = (HttpSendRequest(RequestHandle, SendHeaders, Len(SendHeaders), vbNullString, 0) = 1)
'Wait for the "success" message
If Not RequestSent Then
  Err.Raise HTTPErrorNoHost, , "Failed to connect to the HTTP server: " & Cstr(Err.LastDllError)
End If

我尝试运行数据包捕获并在网络流量出现故障时查看网络流量,但它甚至都没有尝试建立连接。

这里发生了什么,为什么它似乎是随机发生的?

1 个答案:

答案 0 :(得分:1)

Windows/Internet Explorer is set to "Work offline" and the resource is not in the offline cache时,

HttpSendRequest()将失败,错误代码为2(ERROR_FILE_NOT_FOUND)。

这似乎不会影响基于.Net的HTTP客户端或FireFox或Chrome等其他网络浏览器,如果Internet Explorer不是主浏览器或默认浏览器,则不会立即显现。

您可以通过打开Internet Explorer,转到文件菜单(按 Alt ,如果它不可见)返回“在线”,并取消“脱机工作”。在此之后,程序化尝试使用WinInet将正常工作。

请注意,如果您设置拨号/ VPN连接以进行测试或偶尔使用且未设置为“从不拨打连接”,则Windows / Internet Explorer可能会意外进入此状态