2016-10-28 18 views
1

私は1つの奇妙な問題に直面していますが、これはPOSTMANからのこのAPIコール(https://my.factcorp.com/ABCorp/Reporting/api/Events/)をVisual Studio Web Testからは呼び出せませんでした。PostmanからVisual Studio WebtestからREST APIを呼び出す

ポストマンコールトレース

GET https://my.factcorp.com/ABCorp/Reporting/api/Events/ HTTP/1.1

ホスト:my.factcorp.com

接続:キープアライブ

認証:基本

のCache-Control :no-cache

ユーザーエージェント:Mozilla/5.0(Windows NT 10.0。 Win64; x64の)のAppleWebKit/Geckoのような537.36(KHTML、)クローム/ 54.0.2840.71サファリ/ 537.36

ポストマン・トークン:4dfaa309-c7d8-6785-d59c-9679ad4f3aaa

受け入れ:/

受け入れます-encoding:GZIPは、SDCHを収縮、BR

のAccept-言語:EN-US、EN; Q = 0.8

、一方私は、エラー

の下になって、WebTestのから同じ残りのAPIの呼び出しを作っていたときに

要求を失敗しました:既存の接続を強制的にリモートホストによって

を閉じた私はポストマンが要求にいくつかの余分なヘッダを追加した見ることができ、私はまた、手動ですべてのこれらのヘッダを追加することによって、それを試してみました。

コールはVS WebTestのからポストマンから成功取得していない理由

おかげ

答えて

2

は実際には、根本的な原因を発見しました。

理由はに正しい要求セキュリティ(TLS/1.2)WebTestの一方

それは下位レベルSystem.Netプロトコルを使用するので、それを行うことができないに十分ポストマンインテリジェントです。

この問題を解決するために、既定のセキュリティ動作を上書きできるカスタムWebTestプラグインを実際に記述することができます。

using System; 
using System.ComponentModel; 
using System.Net; 
using System.Net.Security; 
using System.Security.Cryptography.X509Certificates; 
using Microsoft.VisualStudio.TestTools.WebTesting; 

namespace MyWebTest 
{ 
    [Description("This plugin will force the underlying System.Net ServicePointManager to negotiate downlevel SSLv3 instead of TLS. WARNING: The servers X509 Certificate will be ignored as part of this process, so verify that you are testing the correct system.")] 
    public class TLS12ForcedPlugin : WebTestPlugin 
    { 

     [Description("Enable or Disable the plugin functionality")] 
     [DefaultValue(true)] 
     public bool Enabled { get; set; } 

     public override void PreWebTest(object sender, PreWebTestEventArgs e) 
     { 
      base.PreWebTest(sender, e); 

      //For TLS 
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

      //For SSL 
      //ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

      //we wire up the callback so we can override behavior and force it to accept the cert 
      ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCB; 

      //let them know we made changes to the service point manager 
      e.WebTest.AddCommentToResult(this.ToString() + " has made the following modification-> ServicePointManager.SecurityProtocol set to use SSLv3 in WebTest Plugin."); 
     } 
     public static bool RemoteCertificateValidationCB(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
     { 
      //If it is really important, validate the certificate issuer here. 
      //this will accept any certificate 
      return true; 
     } 
    } 
} 
関連する問題