php cURL request error 301 via code, niet via browser
Wanneer ik manueel naar test.php krijg ik deze gegevens te zien als json, maar wanneer ik dit via javascript doe geeft de cURL request een error 301.
Dit is test.php
Code (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
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
<?php
header('Content-Type: application/json');
$url = $_GET['url'];
$result = array();
$pagina = loadFile($url);
$info = false;
if(strpos($pagina, 'Op voorraad')!==false){
$info = true;
}
$pos2 = strpos($pagina,"a-size-medium a-color-price");
$price = substr($pagina,$pos2+30,100);
$price = str_replace(' ', '', $price);
$price = substr($price,5,10);
$price = strtok($price, '<');
$price = str_replace(",",".",$price);
$price = str_replace("\n","",$price);
$result = array('available'=>$info,'price'=>$price);
echo json_encode($result);
function loadFile($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
header('Content-Type: application/json');
$url = $_GET['url'];
$result = array();
$pagina = loadFile($url);
$info = false;
if(strpos($pagina, 'Op voorraad')!==false){
$info = true;
}
$pos2 = strpos($pagina,"a-size-medium a-color-price");
$price = substr($pagina,$pos2+30,100);
$price = str_replace(' ', '', $price);
$price = substr($price,5,10);
$price = strtok($price, '<');
$price = str_replace(",",".",$price);
$price = str_replace("\n","",$price);
$result = array('available'=>$info,'price'=>$price);
echo json_encode($result);
function loadFile($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
via de browser toont dit
En met deze javascript code:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$("[data-product]").each(function( index ) {
var url= $( this ).data('url');
$.post("test.php?url="+url+"/", {}, function(data, status){
console.log(data);
});
});
var url= $( this ).data('url');
$.post("test.php?url="+url+"/", {}, function(data, status){
console.log(data);
});
});
Geeft de cUrl request enkel dit terug
Quote:
<html>\r\n<head><title>301 Moved Permanently<\/title><\/head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently<\/h1><\/center>\r\n<hr><center>Server<\/center>\r\n<\/body>\r\n<\/html>\r\n
Een enkele request in plaats van loopen geeft hetzelfde resultaat.
Vanuit een php-script de json opvragen geeft ook 301.
Follow redirects in curl heeft geen effect.
De json laden in een iframe geeft ook 301, maar met file_get_contents ipv curl werkt dit wel.
file_get_contents met jquery post lukt dan weer niet.
Iemand die me hierbij kan helpen?
Gewijzigd op 10/06/2020 00:00:00 door - Ariën -
Maak je code wat "modinger" zodat je dit alles wat beter kunt debuggen, begin hierbij wellicht met de URL.
Ajax heb ik ook geprobeerd, onder andere om async uit te zetten, dit gaf ook geen verschil.
De logs tonen niets.
Ik krijg hetzelfde resultaat als ik om de 10 seconden de post verstuur in javascript.
Wanneer de test werkt zal ik alle code opschonen, nu ben ik vanalles aan het proberen maar geraak er niet aan uit.
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht. Quote-tags zijn bedoeld voor citeren van reacties.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 10/06/2020 00:00:27 door - Ariën -
Quote:
"test.php?url="+url+"/"
Waarom een slash op het einde van je url
Hielp niet.
Wanneer ik dit in een dummy-bestand zet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<div class="url-test" data-url="https://www.amazon.nl/dp/B07XRR7N5V">whatever</div>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
$('div.url-test').each(function() {
var url = $(this).data('url');
$.post("test.php?url="+url+"/", {}, function(data, status) {
console.log(data);
});
});
});
//]]>
</script>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
$('div.url-test').each(function() {
var url = $(this).data('url');
$.post("test.php?url="+url+"/", {}, function(data, status) {
console.log(data);
});
});
});
//]]>
</script>
Krijg ik het volgende terug:
Dus geen idee wat jij anders doet.
Weet je zeker dat cURL goed werkt in combinatie met HTTPS, want het uitvoeren van een cURL-request op een niet-beveiligde site en een site met HTTPS zijn twee compleet verschillende dingen.
Misschien ben je ondertussen deels geblacklist omdat je op meerdere pagina's aan het hameren bent?
Wanneer ik in code het script raadpleeg met een post (of als functie in php) krijg ik die 301 error.
Ik weet dat ze een product advertising api hebben, maar daarvoor moet je voldoen aan bepaalde voorwaarden.
Daarbij wil ik ook gewoon wat bijleren.
Het zou niet uit moeten maken hoe je "test.php" aanroept.
Gewijzigd op 10/06/2020 14:07:03 door Thomas van den Heuvel
Dit is behoorlijk omslachtig, maar werkt voorlopig.
Aan de url ligt het niet.
Ik dacht misschien nog dat amazon controlleerde als je de site effectief via je browser bezoekt, maar na dit te volgen ook geen resultaat:
https://stackoverflow.com/questions/2440729/php-curl-how-can-i-emulate-a-get-request-exactly-like-a-web-browser