powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / POST запрос с Request Payload
11 сообщений из 11, страница 1 из 1
POST запрос с Request Payload
    #39539343
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, товарищи!
Я не изучал специально PHP, поэтому могу не понимать элементарных вещей - уж простите...
Задача у меня такая:
Необходимо по ссылке https://1xstavka.ru/results/ получить результаты матчей одной букмекерской конторы
Я посмотрел в консоли браузера каким образом это делается и увидел следующее:
POST-запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 General 
Request URL: https://1xstavka.ru/getTranslate/ViewGameResultsGroup 
Request Method:POST
Status Code:200 
Remote Address:178.248.235.182:443
Referrer Policy:no-referrer-when-downgrade
 Response Headers 
cache-control:private
content-encoding:gzip
content-type:application/json; charset=utf-8
date:Fri, 20 Oct 2017 06:36:14 GMT
server:nginx
status:200
strict-transport-security:max-age=15768000
vary:Accept-Encoding
 Request Headers 
:authority:1xstavka.ru
:method:POST
:path:/getTranslate/ViewGameResultsGroup
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, br
accept-language:ru,en;q=0.8
content-length:111
content-type:application/json
cookie:typeBetNames=short; tzo=3; _ym_uid=1497963423517908405; indicator=2; lite_version=0; blocks=1%2C1%2C1%2C1%2C1%2C1%2C1%2C1; SESSION=2cebe65d5d71842f4a8300bda320bd7d; completed_user_settings=true; right_side=biggestRight; dnb=1; lng=ru
origin: https://1xstavka.ru 
referer: https://1xstavka.ru/results/ 
user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 YaBrowser/17.9.1.852 Yowser/2.5 Safari/537.36
x-compress:null
x-requested-with:XMLHttpRequest
 Request Payload 
{"Language":"ru"}{"Params":["2017-10-20", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}
Вызывается всё это функцией из js:
$.ajax
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
    // Основная функа получения данных для результатов
    getDataResults: function () {

        if (storeResults.ajax) {
            storeResults.ajax.abort();
        }
        storeResults.data.preloader = true;
        // получаем дату
        var targetDate = storeResults.containerCalendar.val().split('-'),
            timezone = storeResults.timezone * 60;
        targetDate = [targetDate[2], targetDate[1], targetDate[0]].join('-');
        var method = 'ViewGameResultsGroup',
            url = '{"Language":"' + lng + '"}{"Params":["' + targetDate + '", null, ' + storeResults.sport_id + ', null, null, ' + timezone +']}{"Vers":6}{"Adult": ' + helper.getenabledAdult() + '}' + ($.inArray(getPartnerId(), [51, 79]) !== -1 ? '{"partner":' + getPartnerId() + '}' : '');
        if (storeResults.data.type === storeResults.data.typeZone) {
            method = 'ViewGameResults1xZoneGroup';
            url = '{"Language":"' + lng + '"}{"Params":["' + targetDate + '", null, null, null, ' + timezone + ']}{"Vers":4}' + (getPartnerId() === 51 ? '{"partner":'  + getPartnerId() + '}' : '');
        }

        storeResults.ajax = $.ajax({
            url: '/getTranslate/' + method,
            contentType: 'application/json',
            data: url,
            method: "POST",
            success: function (request) {
                console.time('createBase');
                var champ = {}, game = {}, sport = {};

                if (request.Columns) {
                    storeResults.data.columns = request.Columns;
                } else {
                    console.warn('ОТСУТСТВУЮТ ПОЛЯ ДЛЯ РАЗБОРА КОЛОНОК');
                    storeResults.data.preloader = false;
                    return;
                }

                if (request.Data) {
                    storeResults.data.sports = [];

                    request.Data.map(function(curSport) { // пробежкой по спортам
                        // выключить покер на ставке до выяснения обстоятельств
                        if (curSport.ID === 38 && REF_ID === 51) {
                            return;
                        }
                        if (curSport.ID === 124 && REF_ID === 79) {
                            return;
                        }

                        // Обнуляй
                        sport = {};
                        sport.leagues = [];
                        sport.name = curSport.Name;
                        sport.Id = curSport.ID;

                        curSport.Elems.map(function (curChamp) { // пробежкой по лигам
                            champ.Name = curChamp.Name;
                            champ.show = false; // показан - не показан
                            champ.active = false; // выбран - не выбран
                            champ.games = [];

                            if (curChamp.Elems && curChamp.Elems.length) { // пробежкой по играм в лиге
                                curChamp.Elems.map(function (curGame) {
                                    if (curGame.Head) {
                                        game = storeResults.createFunView(curGame.Head);
                                        game.show = false;
                                        if (game.scoreZonePlay) {
                                            game.scoreZonePlay = storeResults.parseStr1xZone(game.scoreZonePlay, game.sportId);
                                        } else {
                                            game.scoreZonePlay = false;
                                        }

                                        if (curGame.Data && curGame.Data.length) {
                                            curGame.Data.map(function (curSubGame) {
                                                if (typeof game.subGames === 'undefined') {
                                                    game.subGames = [];
                                                }
                                                game.subGames.push(storeResults.createFunView(curSubGame));
                                            });
                                        }

                                        champ.games.push(game);
                                    }
                                });
                            }

                            sport.leagues.push(champ);
                            champ = {};
                        });
                        storeResults.data.sports.push(sport);
                    });
                }
                console.timeEnd('createBase');
                storeResults.imgHide();
                storeResults.data.preloader = false;
            }
        });
    },

Подскажите пожалуйста, можно ли так же просто послать запрос и получить ответ используя PHP? Я весь вечер вчера угробил безрезультатно.
Мои наработки ( исходник ):
post.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
<?php
	echo '<br>Начало<br>';
	
	$json = '{"Language":"ru"}{"Params":["2017-10-19", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}';
	
	$param = array("Language" => "ru"
				  ,"Params" => array("2017-10-19", null, null, null, null, 180)
				  ,"Vers" => 6
				  ,"Adult" => false
				  ,"partner" => 51
				  );
	
	
	// Вызов функции
	$retval = fnPayload('https://1xstavka.ru/getTranslate/ViewGameResultsGroup', $param, true);
	echo print_r($retval, true);
	
	echo '<br>Конец<br>';

	// Функция посылающая POST c помощью CURL
    function fnPayload($url, $data=array(), $return_headers=false, $send_headers=array())
    {
		$json = '{"Language":"ru"}{"Params":["2017-10-19", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}';
		
        $payload = json_encode($data);
		echo '<br>1 json_encode(data)<br>';
		echo $payload;
		
		$payload = $json;
		echo '<br>2 json<br>';
		echo $payload;

        $curl = curl_init();
        $send_headers[] = 'Content-Type:application/json; charset=utf-8';
       
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $send_headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);
       
        if($return_headers)
        {
            curl_setopt($curl,CURLOPT_HEADER,true);
        }
       
		
        $out = curl_exec($curl);
		
		echo '<br>out<br>';
		echo print_r($out, true);
       
        if($return_headers)
        {
            $info = curl_getinfo($curl);
           
            $return = array();
            $return['h'] = substr($out, 0, $info['header_size']);
            $return['b'] = json_decode(substr($out, $info['header_size']), true);
            $return['i'] = $info;
           
            curl_close($curl);
            return $return;
        }
        else
        {
            curl_close($curl);
            return json_decode($out, true);
        }
    }
?>

Очень надеюсь на рабочий пример...
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539375
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сходу не увидал строчки с опцией CURLOPT_POST . Или, увидев CURLOPT_POSTFIELDS, curl сам понимает, что POST'ить надо? В мануалке http://php.net/manual/ru/function.curl-setopt.php в примерах отдельно выставляется опция.

Сформировать JSON функцией json_encode(), а потом переписать вручную - вот это не понятно, зачем.


AndroidNeedHelpОчень надеюсь на рабочий пример...Пример чего конкретно?
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539393
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleСформировать JSON функцией json_encode(), а потом переписать вручную - вот это не понятно, зачем.Да там JSON долбанутый походу... Вон там сколько фигурных скобок. На сколько я понял - это не по феншую, так как json_decode выдаёт NULL при попытке преобразовать его в массив. Поэтому я подставил строку из первого спойлера
vkleПример чего конкретно? Пример обращения к этому адресу через POST-запрос... Может, я пример правильный нашёл а сам сайт не выдаёт? Может ему куков не хватает, или ещё что нужно указывать... Я дун-дук в этом вопросе :) больше по VBA, SQL...
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539538
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndroidNeedHelpя подставил строку из первого спойлераПонял.

AndroidNeedHelpПример обращения к этому адресу через POST-запрос...В мануалке (ссылка выше) есть примеры, в том числе, и с POST-запросами. Сама по себе технология отправки запросов описана в протоколе HTTP и не имеет никакого отношения к какому-то конкретному сайту.

AndroidNeedHelpМожет, я пример правильный нашёл а сам сайт не выдаёт? Может ему куков не хватает, или ещё что нужно указывать...Может. По поводу куков - очень даже может. Ещё строка юзер-агента может анализироваться, ещё факт существования какого-то контрольного запроса к серверу... Да мало ли, что там напридумывали, чтоб не отдавать данные кому попало. Когда что-то не идет, а код стопроцентно рабочий - остается только максимально точно эмулировать поведение реального браузера.

AndroidNeedHelpЯ дун-дук в этом вопросе :)Это временно :)
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539702
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Спасибо!
Буду разбираться
Если получится - обязательно отпишусь "для будущих поколений" :)
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539770
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это опять я...
Ну вот смотрите, js-функция не передаёт каких либо замудрёных параметров
Если её немного упростить, пропустив формирование некоторых строк, то она будет выглядеть следующим образом
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        storeResults.ajax = $.ajax({
            url: '/getTranslate/ViewGameResultsGroup'
            contentType: 'application/json',
            data: '{"Language":"ru"}{"Params":["2017-10-20", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}',
            method: "POST",
            success: function (request) {
                console.time('createBase');
                if (request.Columns) {
                    storeResults.data.columns = request.Columns;
                } else {
                    console.warn('ОТСУТСТВУЮТ ПОЛЯ ДЛЯ РАЗБОРА КОЛОНОК');
                    return;
                }

                if (request.Data) {
                    ...
                }
                console.timeEnd('createBase');
            }
        });

На сколько я понимаю, никаких особых "куков" тут не заложено (я их кстати отключал для всех сайтов в браузере и всё равно страница отображается корректно)
Можно ли как-нибудь создать файл post.js запихнуть в него этот код, выложить на сервер и привязать к php странице?
Может пойти таким путём а не мучиться с php? Или для js нужен браузер, и вебсервер его не обработает?
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539782
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndroidNeedHelpникаких особых "куков" тут не заложеноДа, в этом Вы абсолютно правы. Да и вообще, ничего там не контролируется.... Из консоли по-быстрому проверил:
Код: php
1.
2.
3.
4.
$ curl --data '{"Language":"ru"}{"Params":["2017-10-20", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}' \
> --header 'Content-Type: application/json' \
> 'https://1xstavka.ru/getTranslate/ViewGameResultsGroup'
{"Columns":["idgame","sportId","sportName","champId","champName","nameGame","result","DateStart","finish","idTyp","Videos","idbetgames_main","gam.... и так далее 

...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539798
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реализовал свою идею через php и js
post.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>AJAX</title>
  <script
		src="https://code.jquery.com/jquery-1.12.3.min.js"
		integrity="sha256-aaODHAgvwQW1bFOGXMeX+pC4PZIPsvn2h1sArYOhgXQ="
		crossorigin="anonymous"></script>
  <script src="ViewGameResultsGroup.js"></script>
 </head>
<body>
	<form method="post" action="">
		<input type="button" id="submit" value="Погнали">
		<span id="message"></span>
	</form>
</body>
</html>

ViewGameResultsGroup.js
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
$(document).ready(function(){

	var email = '';

	$('#submit').click(function(){
		$.ajax({
			/*
			type: 'POST',
			url:'https://1xstavka.ru/getTranslate/ViewGameResultsGroup',
			data:'{"Language":"ru"}{"Params":["2017-10-20", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}',
			success:function(msg){
				$('#message').html(msg);
			}
			*/
			url:'https://1xstavka.ru/getTranslate/ViewGameResultsGroup',
            contentType: 'application/json',
            data: '{"Language":"ru"}{"Params":["2017-10-20", null, null, null, null, 180]}{"Vers":6}{"Adult": false}{"partner":51}',
            method: "POST",
            success: function (request) {
				$('#message').html(msg);
			}
			
		});
	});

});


Закинул оба файла себе на сайт, но получаю ошибку:

XMLHttpRequest cannot load https://1xstavka.ru/getTranslate/ViewGameResultsGroup. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://artnikol.ru' is therefore not allowed access. The response had HTTP status code 405.

На сколько я понял - это из за того, что я обращаюсь со стороннего сайта, и это типа защиты...
Подскажите, есть шансы её обойти?
Пока буду искать решение...
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39539799
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно понимаете. Читайте про кроссдоменный AJAX.
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39600277
MQLab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndroidNeedHelp, Вы получили jSON запрос?
Если Вам удалось, поделитесь кодом. Тоже ломаю голову над тем же самым запросом, но пока не получается.
...
Рейтинг: 0 / 0
POST запрос с Request Payload
    #39601386
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndroidNeedHelpНа сколько я понял - это из за того, что я обращаюсь со стороннего сайта, и это типа защиты...

Именно, почитайте еще про CSRF/XSRF.
AndroidNeedHelpПодскажите, есть шансы её обойти?

Из браузера - никаких.
AndroidNeedHelpПока буду искать решение...
...умрете от старости.

Ну ладно-ладно.
Вам придется делать отдельный скрипт-транслятор, который будет использовать curl для доступа к нужному сайту - авторизовываться, если нужно, хранить кукисы и прочее. Примеров использования curl полно. А AJAXом обращаться уже к этому скрипту.

P.S. Напрямую из JS через AJAX можно обращаться только в рамках домена, или если на внешних доменах установлен специальный заголовок. Ну или написать свой браузер и сделать его монополистом на рынке браузеров.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / POST запрос с Request Payload
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]