Set location in request- php - php

I am running an application which fetches data from amazon.ae. I use the code below.
<?php
$link = 'https://www.amazon.ae/Huawei-P20-Pro-Dual-SIM/dp/B07MMQRNYT/ref=sr_1_3?keywords=huawei&qid=1557457063&s=electronics&sr=1-3';
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" .
"User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\r\n"
// 'ignore_errors' => true
)
);
$context = stream_context_create($opts);
$html = file_get_contents($link, false, $context);
echo $html;
?>
My server is located in the USA. So the application opens the page as if it is browsing from the USA. This code displays the Amazon.ae page as below
The problem is - this is not how the page is displayed if a user opens the same URL from UAE. The page is displayed as below if opened from UAE.
You can see the 'price' and 'sold by' is different for both locations.
What I want to do is to fetch the page as if my application is running from UAE.
How do I make my application run the code from UAE instead of US.
Thanks in advance

Related

(PHP) file_get_contents with a Authorization Header

How do I use file_get_contents to send a authorization header
I currently have file_get_contents get it with a user agent but I also would like to add a authorization header so I get a functional response instead of a 401 error
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15\r\n"
)
);
$context = stream_context_create($options);
$url = file_get_contents("http://websitethatneedsaauthorizationheader.com", false, $context);
I basically need to copy the authorization header from here:
and then use that on this website and not get a 401 error
this is what it is supposed to look like with the authorization header
After the \n of the User-Agent header, add the autorization header, like this:
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"User-Agent: SomeUser\r\nAuthorization: SomeKey"
)
);

How to send the next cookies in get request?

I receive 503 error, but if i send it from inspect element its fine.
The code worked for me before, but in the last few hours the specific website added cf_clearance and I need to add it to the request as well
How do i send the both cookies?
$opts = array(
'http'=>array(
'method'=>"GET",
'proxy'=>"",
'header'=> "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0\r\n" .
"Cookie: cf_clearance=3de18fcd39d55ce82d9db-1529352303-31536000; PHPSESSID=oahfun4m7vi3edd71\r\n"
));
$context = stream_context_create($opts);
$url = "http://website.com";
$data = file_get_contents($url, false, $context);
echo $data;
There's a pretty good example in the documentation.
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
Add line breaks and concatenate. Your example right now should be resulting in a syntax error because you are not concatenating the two strings.

file_get_contents doesn't work with some links

I'm trying to take the content of a site by file_get_contents(), but it doesn't work. I already tried to follow these codes here, but it doesn't work.
This is the code I have:
$url = "https://www.cb01.uno/";
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
echo $file = file_get_contents($url, false, $context);
It returns nothing. I tried with other site like https://www.w3schools.com and it works, so the problem isn't the HTTPS
EDIT: I tried this solution HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable and now it display:
Not Found
The requested URL /cdn-cgi/l/chk_jschl was not found on this server.

file_get_contents not working with php file

Code:
$btc38="http://api.btc38.com/v1/depth.php?c=ltc&mk_type=btc";
$btc38_r=file_get_contents($btc38);
$btc38_a=json_decode($btc38_r,true);
I have used other webiste's API and they worked, the only one that didn't work is the above one.
all the websites that worked don't use a php files like the one above (depth.php), so maybe this is the issue.
So my question, is there any other way to parse that link into a multidimensional array?
Edit: var_dump is used just for debugging, my intention is to parse the link into an array.
Do not use the var_dump() that prints the output. And set some user agent. Without this, I've get back forbidden:
$url = "http://api.btc38.com/v1/depth.php?c=ltc&mk_type=btc";
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Content-type: application/json\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
$btc38_a = json_decode($file, true);
var_dump($btc38_a);

how do I parse a mobile site with php file_get_content

Sorry if this is a duplicate question.
My target site redirects me to desktop site if the browser is not a mobile. I want to parse the mobile version of the site (http://mobile.mysite.com). I can't use Curl as my server is disabled for that.
what would be the useragent for mobile if it is possible at all ??!!
If you need to send custom headers like User-Agent with your file_get_contents request, the PHP answer to that are stream contexts:
$opts = array(
'http' => array(
'method' => "GET",
'header' => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" .
"User-Agent: Foo Bar Baz\r\n"
)
);
$context = stream_context_create($opts);
file_get_contents($url, false, $context);
See stream_context_create and file_get_contents.
Pick a mobile User-Agent string and use it. They can easily be found from Google.
Here is some sample code that illustrates how to use them with file_get_contents():
<?php
// The first one I found on Google
$uaStr = 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91)';
// Create a stream context
// http://www.php.net/manual/en/context.http.php
$context = stream_context_create(array(
'http'=>array(
'user_agent' => $uaStr
)
));
// The URL
$url = "http://www.example.com/";
// Make the request
$result = file_get_contents($url, FALSE, $context);
try look this php libs:
PHP HttpClient
And if you want get mobile site, set the user agent to specific mobile browser
$userAgent = "NokiaC5-00/061.005 (SymbianOS/9.3; U; Series60/3.2 Mozilla/5.0; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525 3gpp-gba";
setUserAgent($userAgent);
To change your user agent within php without curl you may try this:
<?php
ini_set('user_agent', 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7');
$data = file_get_contents("http://www.mobile.example.com");
?>
PS: Got user agent of the iphone 4 from here !

Categories