我试图从网络上的JSON文件中提取数据。我暂时使用虚拟JSON文件来完成工作。我的代码在下面,但每次都超时,并且没有返回任何内容。如果我也使用不同的URL,也会发生同样的情况。
Sub Test()
Dim strResult As String
Dim objHTTP As Object
Dim URL As String
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "https://jsonplaceholder.typicode.com/posts/2"
objHTTP.Open "GET", URL, False
objHTTP.Send
strResult = objHTTP.ResponseText
MsgBox strResult
End Sub
如果相关,我在文件中启用了以下库:
Visual Basic for Applications
Microsoft Excel 15.0对象库
OLE自动化
Microsoft Scripting Runtime
Microsoft WinHTTP Services,版本5.1
我错过了什么?
编辑:修正。我不知道WinHttpRequest和XMLHTTPRequest之间的区别。使用后者时,代码工作正常。谢谢大家。答案 0 :(得分:0)
使用WinHttpRequest代替XMLHTTPRequest是否有特殊原因?
使用convert -loop 0 -delay 20 a-*.gif result.gif
class CreateRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
public function rules()
{
return [
'product_id' => ['integer', function($attribute, $value, $fail) {
$product = Product::find($value);
if ($value != 0 && !$product ) {
return $fail($attribute.' is invalid.');
}
},
];
}
}
请求的操作系统默认设置 - 例如代理设置 - 使用不时必须明确设置:
WinHttpRequest
IWinHttpRequest::SetProxy method中的HTTP
为Sub Test()
Dim strResult As String
Dim objHTTP As Object
Dim URL As String
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
objHTTP.SetProxy 2, "proxyIP:proxyPort"
URL = "https://jsonplaceholder.typicode.com/posts/2"
objHTTP.Open "GET", URL, False
objHTTP.setCredentials "username", "password", 1
objHTTP.Send
strResult = objHTTP.ResponseText
MsgBox strResult
End Sub
。
IWinHttpRequest::SetCredentials method中的2
为HTTPREQUEST_PROXYSETTING_PROXY
。
使用1
时,HTTPREQUEST_SETCREDENTIALS_FOR_PROXY
请求的操作系统默认值将在控制面板的XMLHTTPRequest
中设置使用。因此,如果您能够通过浏览器访问URL,则应运行以下命令:
HTTP
答案 1 :(得分:0)
你的代码在这里工作正常,但如果事情超时,你或许应该.WaitForResponse
:
Sub Test()
Dim strResult As String
Dim objHTTP As Object
Dim URL As String
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "https://jsonplaceholder.typicode.com/posts/2"
objHTTP.Open "GET", URL, False
objHTTP.Send
objHTTP.waitforresponse
strResult = objHTTP.ResponseText
MsgBox strResult
End Sub