图片的上传和curl下载分析

       我们经常把图片上传到网上, 也从网上下载/浏览图片, 有没有想过, 这是怎么一回事?

       先来看看图片的上传, 现在很多网站有这个功能, 上传后, 会生成一个对应的url,  如:


        csdn就是这样的,  要你先上传图片, 然后插入博文。 如上就是图片上传的过程。 那这个图片上传到了那里呢?  肯定是一台存储服务器啊。


       当我们用浏览器去访问这个图片url的时候, 浏览器发出http请求, 那么存储服务器上必然有服务程序来读取这个图片, 然后把图片以二进制流的形式吐给浏览器, 这个二进制串必然对应一个文件, 浏览器把这个二进制串还原成对应的文件, 于是就能看到文件的内容了。

        我们可以在linux上wget url的方式来下载这个文件, 当然也可以用curl url -o 1.jpg的方式来下载文件。 那用curl下载的过程是怎样的呢?

        curl发起http请求, 图片服务器上的服务程序读取服务器上的图片文件, 然后以二进制流的形式, 吐给linux机器上的curl命令进程, 于是curl就得到了一个string串形式的二进制串, 那么curl当然有能力把这个二进制还原为一个文件(实际上fwrite就是专门做这个事情的), 然后用-o指定二进制串保留成的文件, 于是在1.jpg就是二进制串组成的文件, 万事大吉。

       如果抓包看, 就会发现, 在response中, 出去http头等信息, 传输的二进制串(sudo tcpdump -iany src port 80 -Xnlps0)与文件的二进制串(xxd命令)完全一致.

       很简单。


       最后, 为了对比理解, 可以执行curl http://www.baidu.com,  结果是一段html文本, 你能清晰地看到。 如果是curl http://chuantu.biz/t6/57/1505924700x1951244753.jpg 呢? 那自然是一段二进制串咯, 你看起来就是乱码。  

       其实, 两者的本质都是二进制码流, 无需多说。 看图, 睡觉:







  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用PHP的curl库上图片,可以按照以下步骤进行操作: 1. 首先,确保服务器上已经安装了curl扩展,并在PHP中启用了该扩展。 2. 创建一个curl资源,并设置必要的选项。你可以使用curl_init函数来创建资源,并使用curl_setopt函数来设置选项。 3. 设置请求的URL。使用curl_setopt函数,并将CURLOPT_URL选项设置为目标URL。 4. 设置请求的方法为POST。使用curl_setopt函数,并将CURLOPT_POST选项设置为true。 5. 设置POST的数据。根据你的需求,可以使用curl_setopt函数,并将CURLOPT_POSTFIELDS选项设置为需要发送的数据。对于上图片,你可以将图片的路径作为POST数据。 6. 执行curl请求并获取响应。使用curl_exec函数来执行curl请求,并使用curl_getinfo函数来获取请求的相关信息。 7. 关闭curl资源。使用curl_close函数来关闭curl资源。 下面是一个示例代码,演示了如何使用curl图片: ```php // 图片文件路径 $imagePath = "/path/to/image.jpg"; // 创建curl资源 $curl = curl_init(); // 设置请求的URL curl_setopt($curl, CURLOPT_URL, "http://example.com/upload.php"); // 设置请求的方法为POST curl_setopt($curl, CURLOPT_POST, true); // 设置POST的数据(图片文件路径) curl_setopt($curl, CURLOPT_POSTFIELDS, [ 'upload' => new CURLFile($imagePath) ]); // 执行curl请求并获取响应 $response = curl_exec($curl); // 获取请求的相关信息 $info = curl_getinfo($curl); // 关闭curl资源 curl_close($curl); // 处理响应结果 if ($response === false) { echo "上失败"; } else { echo "上成功"; } ``` 在上述代码中,需要将`http://example.com/upload.php`替换为实际的上图片的URL。另外,你也可以根据需要设置其他curl选项,例如设置请求头信息、设置超时时间等。<span class="em">1</span> #### 引用[.reference_title] - *1* [php curl图片](https://download.csdn.net/download/h_hanlinglingzi/10726132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值