2016-02-10 6 views
1

По этому вопросу Convert curl-command to php curl Я пытаюсь преобразовать curl-инструкцию в запрос ajax.Преобразование curl-команды в ajax-запрос

Мой запрос работает со следующим завиток-команды:

curl --user XXXX:YYYY "URL" 

Но пытаться использовать его в JQuery AJAX он не работает, где мой код выглядит следующим образом:

$.ajax({ 
    url : "URL", 
    type : 'GET', 
    dataType : 'json', 
    contentType : 'application/json', 
    username: "XXXX", 
    password: "YYYY", 
    success : function(data) { 
     console.log(JSON.stringify(data)); 
    }, 
    error : function() { 
     console.log("Cannot get data"); 
    } 
}); 

I также пытался установить значение beforeSend, как показано ниже:

$.ajax({ 
    url : "URL", 
    type : "GET", 
    processData: false, 
    dataType : 'json', 
    headers : { 
     'Accept' : 'application/json', 
     'Content-Type' : 'application/json' 
    }, 
    data : JSON.stringify(text), 
    withCredentials : true, 
    beforeSend : function(xhr) { 
     xhr.setRequestHeader("Authorization", "Basic " + btoa("XXXX:YYYY")); 
    } 
}).then(function(data) { 
    console.log('data', data); 
}, function(err) { 
    console.log('err', err); 
}); 

в обоих случаях я получаю ту же ошибку:

XMLHttpRequest cannot load "URL". Response for preflight has invalid HTTP status code 401

Кто-нибудь знает, как это исправить?

UPDATE

заголовки выглядят следующим образом:

Общие

Request URL: "URL" 
Request Method:OPTIONS 
Status Code:401 Unauthorized 
Remote Address:*** 

Response Headers

Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Connection:Keep-Alive 
Content-Language:en 
Content-Length:1061 
Content-Type:text/html;charset=utf-8 
Date:Wed, 10 Feb 2016 13:12:34 GMT 
Expires:0 
Keep-Alive:timeout=5, max=100 
Pragma:no-cache 
Server:Apache 
Set-Cookie:JSESSIONID=CE27E7E84651D519BD99802B65C431EB; Path=/matchbox-webservice/; Secure 
Strict-Transport-Security:max-age=31536000 ; includeSubDomains 
WWW-Authenticate:Basic realm="Realm" 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 

Заголовки запросов

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,pt;q=0.2,nb;q=0.2,da;q=0.2 
Access-Control-Request-Headers:accept, authorization, content-type 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 
Connection:keep-alive 
Host:*** 
Origin:http://evil.com/ 
Pragma:no-cache 
Referer:http://localhost:8080/templates/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36 
+0

Ну, 401 указывает, что сервер отказывается отвечать из-за проблем с авторизацией. Примечание: аутентификация _not_, но авторизация. Вы действительно уверены, что это законный запрос на сервер? – arkascha

+0

Если префикс не работает, это звучит так, как получающий домен не поддерживает CORS, что означает, что вы не можете сделать запрос от JS. –

+0

Если CORS не поддерживается, команда curl-command не будет работать? – fsulser

ответ

0

Я добавил фильтр CORS на стороне сервера, как показано ниже, но я все еще получаю эту ошибку:

XMLHttpRequest cannot load "URL". Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:8080 ' is therefore not allowed access. The response had HTTP status code 401.

что-то не так с моим определением CORS?

@WebFilter(urlPatterns = "/*", filterName = "simpleCORSFilter") 
public class SimpleCORSFilter implements Filter { 
private static Logger logger = LoggerFactory.getLogger(SimpleCORSFilter.class); 

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException { 
    HttpServletResponse response = (HttpServletResponse) res; 
    HttpServletRequest request = (HttpServletRequest) req; 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); 
    response.setHeader("Access-Control-Max-Age", "10"); // in seconds 
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
    logger.info("doFilter() called: " + request.getMethod()); 
    chain.doFilter(req, res); 
} 

public void init(FilterConfig filterConfig) { 
} 

public void destroy() { 
} 

}