簡體   English   中英

將cURL轉換為JQuery.ajax請求

[英]Converting cURL to JQuery.ajax request

嗨,我正在連接到使用第7層作為IP授權者和eGalaxy作為憑據授權者的API,當發送curl請求時,會向我發送xml行。 我目前在localhost上工作,已經實現了Access-Control-Allow-Origin chrome 擴展

我的curl請求看起來像這樣:

curl https://client-url/eGalaxy.aspx -H 'Content-Type:text/html' --data '<?xml version:"1.0" encoding="UTF-8"?><Envelope><Header><SourceID>0</SourceID><MessageID>131</MessageID><MessageType>Authenticate</MessageType></Header><Body><Authenticate><Username>*username*</Username><Password>*password*</Password><PasswordEncrypted>NO</PasswordEncrypted></Authenticate></Body></Envelope>' --insecure

當我嘗試創建ajax請求時,我收到“無效的HTTP狀態代碼500”錯誤和“ OPTIONS url”(顯示以下內容):

n.ajaxTransport.k.cors.a.crossDomain.send   @   jquery-2.1.3.js:4
n.extend.ajax   @   jquery-2.1.3.js:4
(anonymous function)    @   VM947:2
InjectedScript._evaluateOn  @   VM899:895
InjectedScript._evaluateAndWrap @   VM899:828
InjectedScript.evaluate @   VM899:694

我的ajax代碼如下:

$.ajax({
  url:'https://client-url/eGalaxy.aspx', 
  data:'<?xml version:"1.0" encoding="UTF-8"?><Envelope><Header>
        <SourceID>0</SourceID><MessageID>131</MessageID>
        <MessageType>Authenticate</MessageType></Header><Body>
        <Authenticate><Username>*username*</Username>
        <Password>*password*</Password>
        <PasswordEncrypted>NO</PasswordEncrypted></Authenticate></Body>
        </Envelope>', 
   type:'POST', 
   contentType:'text/xml', 
   dataType:'xml',
   success: function(data){
   },
   error: function(){
   }
 });

任何幫助翻譯成正確的AJAX請求均將不勝感激!

編輯:如果這有所作為,則這些是在卷毛完成時(客戶端信息已刪除)隨客戶端xml返回的標頭 在此處輸入圖片說明

該應用程序也將被制成小部件,因此不會在托管站點上運行。

更新1:我使用@KevinB的建議,即仍未正確添加CORS標頭。

這是我更新的JS代碼,從此鏈接復制而來:

var url = 'https://client-url/eGalaxy.aspx';
var data = '<?xml version="1.0" encoding="UTF-8"?><Envelope><Header><SourceID>1</SourceID><MessageID>131</MessageID><MessageType>Authenticate</MessageType></Header><Body><Authenticate><Username>*username*</Username><Password>*password</Password><PasswordEncrypted>NO</PasswordEncrypted></Authenticate></Body></Envelope>';
var xhr = createCORSRequest('POST', url);
xhr.send(data);
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// Check if the XMLHttpRequest object has a "withCredentials" property.
// "withCredentials" only exists on XMLHTTPRequest2 objects.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// Otherwise, check if XDomainRequest.
// XDomainRequest only exists in IE, and is IE's way of making CORS requests.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// Otherwise, CORS is not supported by the browser.
xhr = null;
}
return xhr;
}
var xhr = createCORSRequest('GET', url);
if (!xhr) {
throw new Error('CORS not supported');
}

在關閉CORS Chrome擴展程序的情況下運行時,我收到一個Access-Control-Allow-Origin =! 'null'錯誤。 知道CORS需要Access-Control-Allow-Origin標頭才能=! 如果將其制作為將被放入Content Manager系統的小部件,“空”會在將來引起問題嗎?

將其設置為“ www.evil.com”,代碼中唯一的錯誤是它說xhr.send()是匿名方法。 使用斷點,我可以看到xhr.send()中的xhr設置為空請求:

> XMLHttpRequest {response: "", responseText: ""}

在createCORSRequest內部,此行是未定義的。 我已經測試過使用“ GET”和“ POST”作為方法。

xhr.open(method, url, true)

編輯2:使用@Fabiano的方法,我已經將web.config更改為我懷疑服務器(?)的兩個版本。 我要附上我經歷過的截圖 我的系統的IIS管理器沒有看到特定的網頁,所以我選擇了ASP Net頁面更改版本2.0更改版本4.0 到目前為止沒有運氣。 決定使用xhr.AppendHeader: 無法識別方法無法識別方法 我決定使用xhr.setRequestHeader(“ Access-Control-Allow-Origin”,“ *”); xhr.RequestHeader eGalaxy.aspx的“網絡”選項卡標題 eGalaxy.aspx標頭

您的XML錯誤。 您放置version:"1.0" ,這將使XML無效。 更改為version="1.0"並嘗試提出您的請求。 它應該工作。 這可能是導致“錯誤請求”錯誤的原因。

您可以在此處驗證XML:在此處輸入鏈接描述

編輯:經過一些研究,問題可能出在服務器發送的標頭上。 您的服務器(在本例中為頁面,即.aspx)似乎跳過了您需要的標題“ Access-Control-Allow-Origin:*”。

請看以下鏈接: http : //enable-cors.org/server.html該站點向您展示了如何為服務器實現它。 由於您請求的頁面稱為eGalaxy.aspx,因此您有2種方法實現標頭:

1-將行Response.AppendHeader("Access-Control-Allow-Origin", "*"); 如果頁面是一個簡單的ASP.NET應用程序。 如果它使用Web API 2,則需要實現此處顯示的其他方法: http : //enable-cors.org/server_aspnet.html

2-編輯服務器根目錄上的web.config文件,並將以下行添加到標記中:

   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>

對於ASP.NET應用程序,您可以采用以下方法。 我提到的鏈接提供了其他應用程序的解決方案,請看一下並選擇合適的解決方案。 :)

請注意,值*告訴您服務器將接受任何跨域請求。 這可能會導致安全問題,因此,您最好的辦法是輸入您的域名地址而不是*。

希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM