2016-07-22 16 views
0

に移行する人は、そのvb6コードをC#またはVisual Basic.netに変換する方法を教えてください。私はSystem.Net.WebRequest()クラスを使用しようとしましたが、成功しませんでした(私はすべてのツリーが別の例外をスローするので、私のC#コードを追加すると役立たないでしょう)。WinHttp.WinHttpRequestを使用する短いvb6コードをc#またはvb.net

このコードはうまく動作します(私はvbaエディタでテストしました)。

明確化:私はいくつかのMY仕事をすることを期待いけない私はちょうどそれが十分であると私はから一人でそれを処理することができるようになります、System.Net.WebRequest()クラスmedhodsにGetHTTPResponse()関数の最初の11行のequivilent方法を理解する必要がありますその点。

ご利用いただきありがとうございます。

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 
+0

あなたはVB6のタイトルに言及していますが、質問にはVBScriptがあります。どちらですか? –

+0

申し訳ありませんが、パラメータに角括弧を追加し、 'Imports System.Runtime.InteropServices'と' Imports Microsoft.Win32'ファイルの先頭に追加する限り、vb6 – jonathana

+0

VB6はVB.NETに一般にペースト可能です。 EG 'Response = .ResponseText'は' Response = .ResponseText() 'になります。 –

答えて

3

C#でWeb要求を実行するための最良の方法は、限り、あなたは.NET 4.5+をサポートするよう、HttpClientを使用しています。ここでは簡単な例です:

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 
    } 
} 

HereはHttpClientをについて学ぶための優れたリソースです。

GetHTTPResponseメソッドにasyncキーワードを必ず付けてください。

+0

私はそれを使用する例をありがとうが、どのプロパティまたはメソッドは、paramsの文字列とsetRequestHeaderを取得ですか? – jonathana

+0

私は理解していると思う、私は次の時間にそれをテストすることができます.. – jonathana

関連する問題