2017-09-01 4 views
0

Je suis incapable de se connecter à l'API REST pour 1 de 2 URL.net HttpWebRequest: La connexion sous-jacente a été fermée: Une erreur inattendue est survenue sur un envoi

iContact.com a 2 URLS pour leur API REST.

Le code suivant fonctionnera pour la première URL

"https://app.sandbox.icontact.com/icp/a/"

Mais échouera pour l'URL suivante

https://app.icontact.com/icp/a/

code Détails

  • C'est une application console
  • L'application a été écrite dans le Cadre VB.net .Net 4.5
  • Nuget Forfaits Newtonsoft.JSON

Erreur: La connexion sous-jacente a été fermée: Un inattendu erreur s'est produite sur un envoi. SendFailure {4}

Dépannage:

  • confirmé n'est pas un problème de pare-feu à l'aide de l'application ARC chrome pour tester repos APPI
  • Capable de ping sur le site web
  • URL Sandbox est en mesure pour se connecter et récupérer les résultats
  • Bien que les informations d'identification fournies soient fausses, vous devriez pouvoir obtenir une erreur d'identification à la place de la connexion fermée

Code du module principal:

Imports System.Net 
Module MainModule 
    Sub Main() 
     Try 
      Dim MyRequest As HttpWebRequest 
      MyRequest = IContactManager.BuildJsonRequest 
      Dim iContactSecurityInformation As ContactClass 
      iContactSecurityInformation = IContactManager.GetiContactSecurityInformation(MyRequest) 
     Catch ex As Exception 

     End Try 
    End Sub 
End Module 

Classe:

Imports Newtonsoft.Json.Linq 
Imports System.Net 
Imports System.IO 
Imports System.Web.Script.Serialization 
Imports System.Text 

Public Class ContactClass 
    Public AppId As String 
    Public BaseUrl As String 
    Public Username As String 
    Public Password As String 
    Public AccountId As String 
    Public ClientFolderId As String 
    Public TestMode As Boolean 
End Class 

Public Class IContactManager 
    Public Shared Function BuildJsonRequest() As HttpWebRequest 
     Dim uri = New Uri(Convert.ToString(My.Settings.Base_URL + "a/")) 
     'Production 
     Dim request = DirectCast(WebRequest.Create(uri), HttpWebRequest) 
     request.Method = "Get" 
     request.Accept = "application/json" 
     request.ContentType = "application/json" 
     request.Headers.Add("Api-Version", "2.2") 
     request.Headers.Add("Api-AppId", "fakeID") 
     request.Headers.Add("Api-Username", "FakeUser") 
     request.Headers.Add("Api-Password", "FakePassword") 

     Return request 
    End Function 
    Public Shared Function GetiContactSecurityInformation(request As HttpWebRequest) As ContactClass 
     Dim Acct As New ContactClass 
     Dim a 
     Try 
      Using response = DirectCast(request.GetResponse(), HttpWebResponse) 
       Using reader = New StreamReader(response.GetResponseStream()) 
        Dim jsonData = reader.ReadToEnd() 
        Dim serializer = New JavaScriptSerializer() 
        a = serializer.Deserialize(Of ContactClass)(jsonData) 
       End Using 
      End Using 
     Catch exc As System.Net.WebException 
      Dim webResponse = TryCast(exc.Response, System.Net.HttpWebResponse) 
      If webResponse IsNot Nothing AndAlso webResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized Then 
       Console.WriteLine("401") 
      Else 
       Throw 
      End If 
     End Try 

     Return Acct 
    End Function 
End Class 

Répondre

1

J'ai trouvé la réponse, il vous suffit d'utiliser le gestionnaire de point de service pour l'URL qui ne fonctionne pas

ServicePointManager.SecurityProtocol = SecurityProtocolT ype.Tls12