首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将使用WinHttp.WinHttpRequest的短WinHttp.WinHttpRequest代码迁移到c#或vb.net

将使用WinHttp.WinHttpRequest的短WinHttp.WinHttpRequest代码迁移到c#或vb.net
EN

Stack Overflow用户
提问于 2016-07-22 17:50:09
回答 1查看 5.4K关注 0票数 0

请有人指导我如何将vb6代码转换为c#或可视basic.net。我尝试过使用System.Net.WebRequest()类,但是没有成功(所有我都会抛出另一个异常,所以我认为添加c#代码不会有帮助)。

这段代码运行良好(我用vba编辑器进行了测试)。

澄清:我不希望有人做我的工作--我只需要理解GetHTTPResponse() 函数to System.Net.WebRequest() 类模型中前11行的相同方法,这就足够了,我将能够从这一点单独处理它。

非常感谢您的时间和考虑。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 18:06:38

在C#中执行web请求的最佳方法是使用HttpClient,只要您支持.NET 4.5+。下面是一个简单的例子:

代码语言:javascript
复制
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方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38532562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档