Такой старый API еще не поддерживает SNI
; осуществление простого текста HTTP
могло бы помочь:
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(ConnectionSpec.CLEARTEXT))
.followRedirects(false)
.build();
Продвижение в эти OkHttpClient.Builder
должно также сказать, где точно оно застревает.
Разве не было бы хорошо, если бы jQuery использовал GM_xmlhttpRequest
внутри, чтобы вы могли пользоваться всеми удобствами методов jQuery и межсайтовой функциональностью Greasemonkey? Как указывает Махемофф, Greasemonkey может позволить вам сделать запрос, не полагаясь на JSONP и не столкнувшись с проблемой обратного вызова, с которой вы сталкиваетесь, но вам придется иметь дело с содержимым JSON самостоятельно.
Мы написали библиотеку, которая сделает именно это: мост Greasemonkey / jQuery XHR . Если вы @require
этот скрипт в своем пользовательском скрипте, то все $. Get
и $. GetJSON
и $. Post
и т. Д. Вызовы jQuery будут работать на разных сайтах, не полагаясь на такие методы, как JSONP.
Таким образом, если вы используете этот мост и просто удалите ? Callback =?
из своего URL-адреса, ваш код jQuery должен работать без изменений. Эта запись в блоге содержит пошаговое руководство. Если у кого-то есть вопросы, комментарии, отчеты об ошибках или предложения по плагину моста, дайте мне знать.
Временное решение - использовать GM_HttpRequest. Вы можете обойтись без JSONP для междоменных запросов, потому что, в отличие от обычного XHR, GM_HttpRequest разрешает междоменные вызовы. Вам нужно что-то вроде:
GM_xmlhttpRequest({
method: "GET",
url: "http://example.com/path/to/json",
onload: function(xhr) {
var data = eval("(" + xhr.responseText + ")");
// use data ...
}
});
Обратите внимание, что это самый простой способ eval JSON. Если вам нужно более безопасное решение для ненадежного JSON, вам необходимо включить небольшую библиотеку для анализа JSON .
К сожалению, вам также нужно обернуть, казалось бы, бесполезный setTimeout нулевой продолжительности вокруг всего. Я считаю, что проще всего вставить GM_xmlhttpRequest в отдельный метод, а затем запустить setTimeout (makeCall, 0);.
Вы можете увидеть реальный пример здесь .