热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

console-chrome有一个屌屌的功能(CopyascURL),PHP有没有已经实现的

如图:把任意请求进行CopyascURL后,就得到了形如如下所示的串:{代码...}如果有post数据的话,还可以加上-d***等项(文件上传暂不考虑)。现有一个服务器端项目,需要记录请求到log,为了方便后续排查问...

如图:

把任意请求进行Copy as cURL后,就得到了形如如下所示的串:

curl "http://example.com/article" -H "DNT: 1" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: en,zh-CN;q=0.8,zh;q=0.6,en-US;q=0.4" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: http://example.com/" -H "COOKIE: PHPSESSID=2nel57rojc12t2426vuan702s7" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed

如果有post数据的话,还可以加上-d ***等项(文件上传暂不考虑)。

现有一个服务器端项目,需要记录请求到log,为了方便后续排查问题,希望在PHP里调用一个方法,就能实现以上功能,将这个curl串记录下来即可方便复现请求。

有没有人用PHP写过,共享一份啊~~~

PS:
已经有人用swift实现了一个:

//
//  NSURLRequest+cURL.swift
//
//  Created by Domagoj Tršan on 25/10/14.
//  Copyright (c) 2014 Domagoj Tršan. All rights reserved.
//  Licence: The MIT License (MIT)
//

import Foundation

extension NSURLRequest {

    /**
     *  Returns a cURL command for a request.
     *
     *  @return A String object that contains cURL command or nil if an URL is
     *  not properly initalized.
     */
    func cURL() -> String? {

        if let length = self.URL.absoluteString?.utf16Count {
            if (length == 0) {
                return nil
            }
        } else {
            return nil
        }

        let curlCommand = NSMutableString()
        curlCommand.appendString("curl")

        // append URL
        curlCommand.appendFormat(" '%@'", self.URL.absoluteString!)

        // append method if different from GET
        if("GET" != self.HTTPMethod) {
            curlCommand.appendFormat(" -X %@", self.HTTPMethod!)
        }

        // append headers
        let allHeadersFields = self.allHTTPHeaderFields as? [String: String]
        let allHeadersKeys = allHTTPHeaderFields?.keys.array as [String]
        let sortedHeadersKeys  = allHeadersKeys.sorted { $0 <$1 }
        for key in sortedHeadersKeys {
            curlCommand.appendFormat(" -H '%@: %@'",
                                      key, self.valueForHTTPHeaderField(key)!)
        }

        // append HTTP body
        let httpBody = self.HTTPBody
        if httpBody?.length > 0 {
            let httpBody = NSString(data: self.HTTPBody!,
                                    encoding: NSUTF8StringEncoding)
            let escapedHttpBody =
              NSURLRequest.escapeAllSingleQuotes(httpBody!)
            curlCommand.appendFormat(" --data '%@'", escapedHttpBody)
        }

        return String(curlCommand)
    }

    /**
     *  Escapes all single quotes for shell from a given string.
     *
     *  @param value The value to escape.
     *
     *  @return An escaped value.
     */
    class func escapeAllSingleQuotes(value: String) -> String {
        return
          value.stringByReplacingOccurrencesOfString("'", withString: "'\\''")
    }
}

回复内容:

如图:

把任意请求进行Copy as cURL后,就得到了形如如下所示的串:

curl "http://example.com/article" -H "DNT: 1" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: en,zh-CN;q=0.8,zh;q=0.6,en-US;q=0.4" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: http://example.com/" -H "COOKIE: PHPSESSID=2nel57rojc12t2426vuan702s7" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed

如果有post数据的话,还可以加上-d ***等项(文件上传暂不考虑)。

现有一个服务器端项目,需要记录请求到log,为了方便后续排查问题,希望在PHP里调用一个方法,就能实现以上功能,将这个curl串记录下来即可方便复现请求。

有没有人用PHP写过,共享一份啊~~~

PS:
已经有人用swift实现了一个:

//
//  NSURLRequest+cURL.swift
//
//  Created by Domagoj Tršan on 25/10/14.
//  Copyright (c) 2014 Domagoj Tršan. All rights reserved.
//  Licence: The MIT License (MIT)
//

import Foundation

extension NSURLRequest {

    /**
     *  Returns a cURL command for a request.
     *
     *  @return A String object that contains cURL command or nil if an URL is
     *  not properly initalized.
     */
    func cURL() -> String? {

        if let length = self.URL.absoluteString?.utf16Count {
            if (length == 0) {
                return nil
            }
        } else {
            return nil
        }

        let curlCommand = NSMutableString()
        curlCommand.appendString("curl")

        // append URL
        curlCommand.appendFormat(" '%@'", self.URL.absoluteString!)

        // append method if different from GET
        if("GET" != self.HTTPMethod) {
            curlCommand.appendFormat(" -X %@", self.HTTPMethod!)
        }

        // append headers
        let allHeadersFields = self.allHTTPHeaderFields as? [String: String]
        let allHeadersKeys = allHTTPHeaderFields?.keys.array as [String]
        let sortedHeadersKeys  = allHeadersKeys.sorted { $0 <$1 }
        for key in sortedHeadersKeys {
            curlCommand.appendFormat(" -H '%@: %@'",
                                      key, self.valueForHTTPHeaderField(key)!)
        }

        // append HTTP body
        let httpBody = self.HTTPBody
        if httpBody?.length > 0 {
            let httpBody = NSString(data: self.HTTPBody!,
                                    encoding: NSUTF8StringEncoding)
            let escapedHttpBody =
              NSURLRequest.escapeAllSingleQuotes(httpBody!)
            curlCommand.appendFormat(" --data '%@'", escapedHttpBody)
        }

        return String(curlCommand)
    }

    /**
     *  Escapes all single quotes for shell from a given string.
     *
     *  @param value The value to escape.
     *
     *  @return An escaped value.
     */
    class func escapeAllSingleQuotes(value: String) -> String {
        return
          value.stringByReplacingOccurrencesOfString("'", withString: "'\\''")
    }
}

收集到一个不错的,可供参考。

public function getCurlCommand() {
    try {
        if (php_sapi_name() == 'error cli') {
            throw new Exception("cli");
        }

        $curl_command = 'curl ';
        $post_data = $get_data = '';

        if($_GET) {
            $gets = http_build_query($_GET);
            $get_data .= strpos($curl_command, '?') ? '&' . $gets : '?' . $gets;
        }

        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $posts = http_build_query($_POST);
            $post_data = ' -d "' . $posts . '"';
        }

        $path = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['PHP_SELF'];
        $curl_command .= '"' . "http://{$_SERVER['HTTP_HOST']}" . $path . $get_data . '"';
        if ($post_data) {
            $curl_command .= $post_data;
        }

        $headers = array();
        if (function_exists('getallheaders')) {
            $headers = getallheaders();
        } else {
            foreach ($_SERVER as $name => $value) {
                if (substr($name, 0, 5) == 'HTTP_') {
                    $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
                }
            }
        }
        foreach ($headers as $key => $value) {
            if($key == 'Accept-Encoding')  $value = str_replace('gzip, ', '', $value);
            $curl_command .= ' -H "' . $key . ':' . $value . '"';
        }

        return $curl_command;
    } catch (Exception $e) {
        return $e->getMessage();
    }

}

推荐阅读
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 目录爬虫06scrapy框架1.scrapy概述安装2.基本使用3.全栈数据的爬取4.五大核心组件对象5.适当提升scrapy爬取数据的效率6.请求传参爬虫06scrapy框架1. ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 使用chrome编辑器实现网页截图功能的方法
    本文介绍了在chrome浏览器中使用编辑器实现网页截图功能的方法。通过在地址栏中输入特定命令,打开控制台并调用命令面板,用户可以方便地进行网页截图操作。 ... [详细]
  • 这个问题发生在重新安装系统后,丢失了之前的privatekey等。所以解决方法就是提示的revokeandrequest。到developercenter中找到certificat ... [详细]
  • 前端提高篇(七十):SVG基本使用、基本样式、路径path
    SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文 ... [详细]
author-avatar
fanhua1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有