我想为特定网站创建代理,以便无法访问该网站的用户(例如,由于网站IP被其ISP阻止),可以通过我的代理访问它。我会使用Guzzle发出HTTP请求,将所有链接交换到我自己的网站,然后显示它。
我知道这并不完全理想,但是一开始似乎有效,我不指望有数百人使用它。它应该就位,以防有人确实需要它。
我遇到的问题是cookies。另一个站点显然使用会话/ cookie来保持用户登录。基本上没有登录就无法做任何事情。我已经将所有表单数据等传递给HTTP请求,但cookie一直让我失望。
protected function makeRequest($path, $parameters)
{
$cookieJar = new CookieJar;
$client = new Client(['base_uri' => self::$staticURL]);
$response = $client->request($parameters['method'], self::buildUrl($path), [
'form_params' => Request::all(),
'cookies' => $cookieJar,
]);
// Session::flash can only flash strings, but CookieJar is not serializable.
// Session::flash('cookie', $cookieJar);
return self::replaceURLs($parameters['original'], self::$staticURL, $response->getBody(), $parameters['base']);
}
正如您所看到的,我正在将CookieJar
实例传递给请求,正如文档中提到的那样。有了这个,我就可以登录该网站了,但是当我点击另一个链接时,它就会把我退回去。所以我认为它不会在多个请求中保存cookie。
我必须采取哪些方式?
答案 0 :(得分:1)
我认为CookieJar
选项需要CookieJarInterface
类型的实例,但实际情况并非如此。它需要的是protected function makeCookiePath()
{
$sessionId = $this->request->session()->get('cookie.id', str_random(40));
$this->request->session()->put('cookie.id', $sessionId);
return storage_path('cookies/' . $sessionId);
}
protected function makeRequest($path, $parameters)
{
$cookieJar = new FileCookieJar($this->makeCookiePath(), true);
// ...
}
。进一步查看Guzzle库,我找到了FileCookieJar
,它保存在一个文件中。
我现在为每个会话生成一个ID,并使用该ID将cookie写入文件。这样,我的页面的每个用户都保存了cookie,并且每次后续请求都会加载它们。
if (readString.indexOf("?b24vb2ZmL2Z1bmN0aW9u") >= 0)
{
//What it does.
actionTransmitter.sendSignal(1, 'C', false);
switchstatus3 = false;
delay(3000);
actionTransmitter.sendSignal(1, 'C', true);
switchstatus3 = true;
}