Могу ли я искать в Google с помощью XMLHttpRequest()?

Могу ли я выполнять поиск в Google с помощью XMHhttpRequest() из разных источников?

var xhr = XMLHttpRequest();
xhr.open("GET", www.google.com/?q=what+you+want+to+search, true);

person Rohan A    schedule 21.06.2013    source источник
comment
Ознакомьтесь с Политикой одинакового происхождения и поймите, почему это не так. должно случиться. Если вы хотите выполнить поиск в Google, используйте их API.   -  person epascarello    schedule 21.06.2013
comment
Расширения Google Chrome, по-видимому, могут отправлять XMLHttpRequests из разных источников. Я хотел знать, будет ли написанный мной код работать.   -  person Rohan A    schedule 21.06.2013
comment
@RohanA Запустив код, вы бы поняли, работает ли он.   -  person epascarello    schedule 21.06.2013


Ответы (1)


Попробуй это:

curl -H "Origin: http://domain.com" -X OPTIONS --head https://www.google.com/

В настоящее время это дает вам:

HTTP/1.1 405 Method Not Allowed
Content-Type: text/html; charset=UTF-8
Content-Length: 962
Date: Fri, 21 Jun 2013 17:58:45 GMT
Server: GFE/2.0

Так что нет, вы не можете, по крайней мере, не с их общедоступным веб-сайтом. Если бы это было так, там было бы Access-Control-Allow-Origin: * с 200 OK. * — это подстановочный знак для «любого домена». Так что либо это должно быть так, либо оно должно соответствовать вашему происхождению.

Даже если он вернул правильный заголовок, в браузере должна быть поддержка CORS. Вы можете увидеть совместимость браузера здесь. IE 8 и 9 поддерживают CORS только через XDomainRequest, который имеет жесткие ограничения (например, отсутствие файлов cookie или настраиваемых заголовков). Вы можете прочитать больше о заголовках управления доступом здесь.

В случае сбоя CORS используется такая же политика происхождения.

Однако есть способ. Google REST API поддерживает запросы из разных источников:

curl -H "Origin: http://domain.com" -X GET --head "https://www.googleapis.com/customsearch/v1?"

Что дает вам:

HTTP/1.1 400 Bad Request
Access-Control-Allow-Origin: http://domain.com
Content-Type: application/json; charset=UTF-8
Access-Control-Expose-Headers: Content-Encoding,Content-Length,Content-Type,Server
Date: Fri, 21 Jun 2013 18:12:51 GMT
Expires: Fri, 21 Jun 2013 18:12:51 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked

Обратите внимание на Access-Control-Allow-Origin: http://domain.com.

Итак, если у вас есть ключ API, вы можете, если используете API.

person Luke    schedule 21.06.2013