如何记录所有信息并进入CURL?

时间:2017-06-23 10:19:37

标签: php curl

Client1向Server1发送请求并通过php curl获取响应。我只能访问Client1源代码,我需要记录所有发出并进入Client1的请求和响应,并将其保存为txt文件。

这样做的原因是用新服务器替换Server1。 Client1源代码非常复杂,因此我决定记录所有请求和响应,以便我可以对Server1进行反向工程。

使用Linux命令(例如使用--verbose和--trace-ascii)或使用WireShark对类似问题有一些答案,但我无法理解它们,我必须在我的代码中实现它而不是使用它命令。怎么做?

以下是卷曲功能:

    private function fba8eb($ia61712c)
{
    if (empty($this->v9e19674cb))
        return false;
    $this->query = $ia61712c;
    preg_match('/action=(.*?)&/', $ia61712c, $i43da24755ffd);
    $i87f2ea = $i43da24755ffd[1];
    switch ($this->v488f1ce) {
        case 'no-ssl':
        case 'ssl':
            fwrite($this->v9e19674cb, "POST " . $this->v7d5fd . " HTTP/1.0\r\n");
            fwrite($this->v9e19674cb, "User-Agent: Smsmidlet-api/1.0 (" . $this->v488f1ce . "; " . $this->v9f1e7fea . "; " . $this->v9f1e7fea_version . "; call: $i87f2ea)\r\n");
            fwrite($this->v9e19674cb, "Host: " . $this->v45213b . "\r\n");
            fwrite($this->v9e19674cb, "Content-type: application/x-www-form-urlencoded; charset=utf-8\r\n");
            fwrite($this->v9e19674cb, "Content-length: " . strlen($ia61712c) . "\r\n");
            fwrite($this->v9e19674cb, "\r\n" . $ia61712c . "\r\n");
            $i3bd625bb = '';
            while (!feof($this->v9e19674cb)) {
                @$i3bd625bb .= fgets($this->v9e19674cb, 2048);
            }
            $ie4a1f55ce = fclose($this->v9e19674cb);
            list($ie3dffdbcc, $this->data) = explode("\r\n\r\n", $i3bd625bb, 2);
            return $this->data;
            break;
        case 'curl':
        case 'curl-ssl':
            if (get_resource_type($this->v9e19674cb) == 'curl') {
                @curl_setopt($this->v9e19674cb, CURLOPT_POST, 1);
                @curl_setopt($this->v9e19674cb, CURLOPT_POSTFIELDS, $ia61712c);
                @curl_setopt($this->v9e19674cb, CURLOPT_FOLLOWLOCATION, 1);
                @curl_setopt($this->v9e19674cb, CURLOPT_HEADER, 0);
                @curl_setopt($this->v9e19674cb, CURLOPT_RETURNTRANSFER, 1);
                @curl_setopt($this->v9e19674cb, CURLOPT_SSL_VERIFYPEER, false);
                @curl_setopt($this->v9e19674cb, CURLOPT_USERAGENT, 'Seridlet-api/1.0 (' . $this->v488f1ce . '; ' . $this->v9f1e7fea . '; ' . $this->v9f1e7fea_version . "; call: $i87f2ea )");
                @$i3bd625bb = curl_exec($this->v9e19674cb);
                $i3bd625bb = html_entity_decode($i3bd625bb);
                curl_close($this->v9e19674cb);
                return $this->data = $i3bd625bb;
            }
            break;
    }
    return false;
}

1 个答案:

答案 0 :(得分:1)

也许只需制作日志功能并执行

即可获得所需内容
private function fba8eb($ia61712c)
{
    {
        ob_start();
        var_dump($_GET,$_POST,$_COOKIE,$this,$ia61712c);
        $debugstr=ob_get_clean();
        log_debug_info($debugstr);
        unset($deugstr);
    }
if (empty($this->v9e19674cb))

我想到的另一件事是CURLOPT_VERBOSE和CURLOPT_STDERR。

是已经使用CURLOPT_STDERR的代码吗?如果没有,你可以创建一个tmpfile(),将它提供给CURLOPT_STDERR,启用CURLOPT_VERBOSE,并在curl完成时记录它的内容(注意你需要将stream_get_meta_data($ tmpfile)['uri']提供给CURLOPT_STDERR ,不是文件句柄本身,而是stream_get_meta_data为您提供的路径。)