请有人指导我如何将vb6代码转换为c#或可视basic.net。我尝试过使用System.Net.WebRequest()类,但是没有成功(所有我都会抛出另一个异常,所以我认为添加c#代码不会有帮助)。
这段代码运行良好(我用vba编辑器进行了测试)。
澄清:我不希望有人做我的工作--我只需要理解GetHTTPResponse() 函数to System.Net.WebRequest() 类模型中前11行的相同方法,这就足够了,我将能够从这一点单独处理它。
非常感谢您的时间和考虑。
Function ReadToken(s)
Dim X()
ReDim X(0)
s = Replace(s, Chr(34), "")
bRes = False
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.IgnoreCase = True
RegExp.Pattern = "token\:(.+?),type\:(.+?),expires_in\:(.+?)"
bRes = RegExp.test(s)
If bRes Then
Set oMatches = RegExp.Execute(s)
ReDim X(2)
X(0) = oMatches(0).subMatches(0)
X(1) = oMatches(0).subMatches(1)
X(2) = oMatches(0).subMatches(2)
End If
ReadToken = X
End Function
Function GetHTTPResponse(ByVal Id As Long) As String
' On Error Resume Next
Const username = "username"
Const password = "password"
sURL = "https://api.exoclick.com/v1/login"
Set oXMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
With oXMLHTTP
.Open "Post", sURL, False
.setRequestHeader "Content-Type", "application/json"
params = "{""username"":" & Chr(34) & username & Chr(34) & ", ""password"":" & _
Chr(34) & password & Chr(34) & "}"
.send params
If .Status = 200 Then
Response = .ResponseText
Token = ReadToken(Response)
Authorization = "{""type"":" & Chr(34) & Token(1) & _
Chr(34) & ",""token"":" & Chr(34) & Token(0) & Chr(34) & "}"
.abort
sURL = "https://api.exoclick.com/v1/statistics/advertiser/date"
params = "{""campaignid"":" & Id & "}"
.Open "GET", sURL, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", Authorization
.send params
GetHTTPResponse = .ResponseText
End If
End With
Set oXMLHTTP = Nothing
End Function发布于 2016-07-22 18:06:38
在C#中执行web请求的最佳方法是使用HttpClient,只要您支持.NET 4.5+。下面是一个简单的例子:
using (var client = new HttpClient())
{
var values = new Dictionary<string, string>
{
{ "username", username },
{ "password", password }
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync(sURL, content);
if (response.IsSuccessStatusCode)
{
var response = await response.Content.ReadAsString();
// then repeat for the next request
}
}这里是学习HttpClient的一个很好的资源。
确保用GetHTTPResponse关键字标记您的async方法。
https://stackoverflow.com/questions/38532562
复制相似问题