2009-06-01 40 views
4

私は支払いエンジンにXMLをポストする必要があり、参照コードはSystem.Net.HttpWebRequestオブジェクト(asp.net)を使用する古典的なASPアプリケーションを持っています。 Classic ASPにXMLを投稿するのに使用できるのと同等のものがありますか?System.Net.HttpWebRequestの古典的なASP?

答えて

6

Heres私はASPでHTTPリクエストを作成するために使用する小さなヘルパー関数です。そのJScriptでは、あなたは少なくともアイデアを得る必要がありますし、いくつかの厄介なもののいくつかのポインターは、私たちが長年にわたり鉄を抜かなければならなかった。

<% 

/* 
    Class: HttpRequest 
     Object encapsulates the process of making an HTTP Request. 

    Parameters: 
     url - The gtarget url 
     data - Any paramaters which are required by the request. 
     method - Whether to send the request as POST or GET 
     options - async (true|false): should we send this asyncronously (fire and forget) or should we wait and return the data we get back? Default is false 

    Returns: 
     Returns the result of the request in text format. 

*/ 

var HttpRequest = function(url, data, method, options ) 
{ 
    options = options ? options : { "async" : false }; 
    options[ "async" ] = options["async"] ? true : false; 

    var text = ""; 
    data = data ? data : ""; 
    method = method ? String(method).toUpperCase() : "POST"; 

    // Make the request 
    var objXmlHttp = new ActiveXObject("MSXML2.ServerXMLHTTP"); 
    objXmlHttp.setOption(2, 13056); // Ignore all SSL errors 

    try { 
     objXmlHttp.open(method, url, options[ "async" ]); // Method, URL, Async? 
    } 
    catch (e) 
    { 
     text = "Open operation failed: " + e.description; 
    } 

    objXmlHttp.setTimeouts(30000, 30000, 30000, 30000); // Timeouts in ms for parts of communication: resolve, connect, send (per packet), receive (per packet) 
    try { 
     if (method == "POST") { 
      objXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     } 

     objXmlHttp.send(data); 

     if (options[ "async" ]) { 
      return ""; 
     } 

     text = objXmlHttp.responseText; 

    } catch(e) { 
     text = "Send data failed: " + e.description; 
    } 

    // Did we get a "200 OK" status? 
    if (objXmlHttp.status != 200) 
    { 
     // Non-OK HTTP response 
     text = "Http Error: " + objXmlHttp.Status + " " + Server.HtmlEncode(objXmlHttp.StatusText) + "\nFailed to grab page data from: " + url; 
    } 

    objXmlHttp = null; // Be nice to the server 

    return text ; 
} 

%> 

あなたは(httprequest.aspと呼ばれる)のファイルにこのコードを使用して、それを使用することができることを保存する場合は、次の警告の

<%@ Language="JScript" %> 
<!--#include file="httprequest.asp"--> 
<% 

var url = "http://www.google.co.uk/search"; 
var data = "q=the+stone+roses"; // Notice you will need to url encode your values, simply pass them in as a name/value string 

Response.Write(HttpRequest(url, data, "GET")); 

%> 

一つの言葉を、それがエラーを持っている場合、それはに戻りますあなたはエラーメッセージ、それをキャッチする方法はありません。私たちのニーズにはうまくいきます。少しだけ保護が必要な場合は、エラーを少しでも処理できるカスタム関数を作成することができます。

希望に役立ちます。

+0

+1、それは素晴らしい機能ですが、投稿がHTMLフォームの投稿をエミュレートしていると仮定しています。私はその前提を取り除き、コンテンツタイプヘッダをオプションオブジェクトのオプションのプロパティにします。あなたはそれをデフォルトにすることができますが、外部コードが "text/xml"のようにそれを指定できるようにします。 – AnthonyWJones

+0

あまりにも本当のアンソニーは、当時のニーズから生まれ、現在私たちのニーズに合った機能のひとつです。 JScriptをASPに使用するのが好きな理由の1つは、近年登場してきたクライアントサイドのおいしさと技術のすべてから学ぶことができることです。オプションオブジェクトを渡すことで、 "contenttype"オプションを渡すことができるように、現在リファクタリングすることができます。しかし、私はコードベースに追加することをお勧めします;) –

+1

ありがとう!あなたは救い主です! – cgatian

1

すべてAJAXyはXMLHttpを使用します。
このリンクが役立つかどうかを確認してください - http://www.mikesdotnetting.com/Article.aspx?ArticleID=39

編集:この回答を受け入れないでください。
私がしたことは、Googleを使って検索することです。あなたはそれを最初に試しましたか?

私はいくつかの質問には検索で回答できると思います。
他のすべてについては、StackOverflowがあります。

4

従来のASPでは、ActiveXオブジェクトのXMLHTTPまたはMSXMLライブラリ経由の利用可能なServerXMLHTTPオブジェクトを使用して、要求を開始できます。 (MSDN reference)。

This KB articleは、ServerXMLHTTPオブジェクトの良いリファレンスとサンプルコードを提供します。

+1

ServerXMLHTTPはここで使用するオプションです.XMLHTTPはサーバー側で使用しないでください。スレッドセーフではありません。 – AnthonyWJones

2

私は理由この関数の非同期バージョンが動作して回避し、ここで議論し、「何の送信」エラーだと思う:

How do I fire an asynchronous call in asp classic and ignore the response?

あなたは非同期バージョンでCOMオブジェクトを解放することはありませんしているということではありません - それが問題を解決し、大きな時間リソースを漏らしてしまうという悪いこと。

関連する問題