Ответ CURL отправить на пользовательский URL PHP / Laravel

#php #laravel #web-scraping

#php #laravel #очистка веб-страниц

Вопрос:

     public  function amazon_curl_request($url)
{
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_HTTPHEADER => array(
        ),
    ));
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

  public function amazon(Request  $request)
{
    $url = $request->input('link');
    $parsed_link = parse_url($url);
    $url = 'https://www.amazon.com/s?k=' .$url;
    $url=str_replace(' ', ' ', $url);
    $response =  $this->amazon_curl_request($url);        
    return view('FrontEnd/amazon/result_page', compact('response'));
}
  

вот маршрут Route::get('/amazon/search', [AmazonController::class , 'amazon'])->name('search.amazon');

Мне нужно изменить URL, по умолчанию он перенаправляет меня сюда http://localhost:8000/s?k=bag

Но мне нужен этот URL-адрес, чтобы показать ответ http://localhost:8000/amazon-search/bag

Это сайт очистки Amazon.

Комментарии:

1. Добро пожаловать в SO .. что вы пробовали и какую ошибку вы получаете.?

2. Я пытаюсь отказаться от Amazon, он отлично работает без URL,, CURL ответ принудительно перенаправляет меня » localhost: 8000 / s? k = bag » здесь, «s? k =» это URL-запрос Amazon, но я хочу показать результат в моем пользовательском URL, например » localhost: 8000/ amazon-search /bag » здесь bag — строка поиска

3. тогда не `возвращайте $response;` это сохраняйте в переменной и используйте bkade для отображения данных

4. поставьте это под сомнение не здесь

5. можете ли вы также добавить свои маршрутизаторы

Ответ №1:

используйте Http , поскольку вы используете ссылку laravel 8 ref https://laravel.com/docs/8.x/http-client

 use IlluminateSupportFacadesHttp;

public function amazon(Request  $request)
{
    $url = $request->input('link');
    $parsed_link = parse_url($url);
    $url = 'https://www.amazon.com/s?k=' .$url;
    $url=str_replace(' ', ' ', $url);
    $response =  Http::get($url)->body();   // body() function will return html of url   

    echo $response  // as it is already html of amazon or do some datamanipulation here 
    // return view('FrontEnd/amazon/result_page', compact('response'));
}
  

Комментарии:

1. Та же проблема… он показывает мне данные в » localhost: 8000 / s? k = bag » по этому URL-адресу.. но мне нужен » localhost: 8000 / ‘/ amazon / search » этот URL-адрес..