How To Add User Agent Header To HTTP Requests in PHP

There are a few ways to make a http request in PHP. The most robust way to do it is with curl and based on how complex the query is, maybe your only option. If you are just making a basic enough request, the amazingly simple file_get_contents() can be used. Yes, this function also opens files from URLs, assuming the option is enabled in the config. Including headers is something that is fairly easy to do, but it is not entirely straight forward with PHP. This guide will show you how to set a custom user agent header to PHP HTTP requests.

As a quick recap, a user agent is a string that is sent as a header in a HTTP request. It is used as a way for the client to identify themselves to the webserver. Web browsers like Chrome, IE, Firefox, etc. All provide a user agent value when they make requests. It is never wise to build security based on this alone, but if you want to block bots, the user agent is usually the place to start. If you are having trouble making requests and are getting caught in a security filter. Changing the agent name you use in the request can often get you past the block.

Adding a custom User Agent to Curl Request

Since curl gives a lot more options for detailed configuration, I will start with this. The code below will show you a fairly simple curl request that has a custom user agent defined. The key part to note here is the CURLOPT_USERAGENT option. This is where you will provide a string that contains the UA value.

$ch=curl_init();<br>
curl_setopt($ch, CURLOPT_URL, $url);<br>
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);<br>
curl_setopt($ch, CURLOPT_USERAGENT, "Custom useragent or some well known one");<br>
$lines_string=curl_exec($ch);<br>
curl_close($ch);<br>
echo $lines_string;

Adding Headers to File Get Contents

This is a bit of a magic method in PHP. It can do a lot more than it initially seems. Being able to fetch files from a remote server is one of these. On top of being able to fetch HTML, JSON or any format from a URL, you can also pass headers in this request. You will need to ensure you have the remote open enabled on your server first. It can be a bit of a security risk to have it enabled so it is often disabled by default. If this is the method you wish to use, then here is how you configure it. The code below will show you how to set the agent for a file_get_contents request.

$opts = array(
	'http'=>array(
		'method'=>"GET",
		'header'=>"User-Agent: A random useragent that you like"
	)
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents($url, false, $context);

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.