国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php curl抓取墻外圖片及sftp上傳【填坑指南】

ralap / 673人閱讀

摘要:背景最近有需求下載頭像到本地,以文件形式上傳到第三方,遇坑就填第一版將獲取的信息以字符串返回,而不是直接輸出因為要寫文件啟用時會將頭文件的信息作為數據流輸出適合調試配置手冊文檔地址配置項需要什么翻著找找遇到幾個問題部分圖片所在主站防盜鏈機制

背景

最近有需求下載頭像到本地,以文件形式上傳到第三方,遇坑就填

curl 第一版
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true, // TRUE 將curl_exec()獲取的信息以字符串返回,而不是直接輸出(因為要寫文件)
    CURLOPT_HEADER         => false, // 啟用時會將頭文件的信息作為數據流輸出(適合調試)
    CURLOPT_URL            => "url",
]);

$data = curl_exec($ch);
curl_close($ch);

curl_setopt配置手冊(文檔地址),配置項需要什么翻著找找

遇到幾個問題:

部分圖片所在主站防盜鏈機制,header頭部需要加refer

部分圖片地址是facebook,要配代理,并且圖片會重定向到其他圖片服務器上

掛代理加超時,有時不定時拿不到,加重試機制

因此解決:

配置項加CURLOPT_REFERER => "xx地址"

配置項加

CURLOPT_FOLLOWLOCATION  => true, // TRUE 時將會根據服務器返回 HTTP 頭中的 "Location: " 重定向
CURLOPT_PROXY           => "代理地址",
CURLOPT_PROXYPORT       => "代理端口",
CURLOPT_PROXYTYPE       => CURLPROXY_SOCKS5, // 可以是 CURLPROXY_HTTP (默認值) CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、 CURLPROXY_SOCKS4A 或 CURLPROXY_SOCKS5_HOSTNAME

隨便加個循環,比如while

第二版
$curl_opts = [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => false,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_URL            => "圖片地址",
    CURLOPT_REFERER        => "防盜鏈主站地址",
    CURLOPT_TIMEOUT        => 20,
];

foreach (["fbcdn", "facebook"] as $domain) {
    if (stripos("圖片地址", $domain) !== false) {
        $curl_opts += [
            CURLOPT_PROXY     => "代理地址",
            CURLOPT_PROXYPORT => "代理端口",
            CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
        ];

        break;
    }
}

$retry_time = 2;
while ($retry_time > 0) {
    $ch = curl_init();
    curl_setopt_array($ch, $curl_opts);

    try {
        $data = curl_exec($ch); //data即為文件流
        curl_close($ch);

        break;
    } catch (Exception $e) {
        // 可進行其他異常處理
        $retry_time--;
    }
}

進行curl_setopt配置時,注意參數有版本限制,低版過低本不支持,使用curl_version()確認當前環境版本

sftp

使用之前shell確認是已安裝ssh2擴展,php -m | grep ssh2

$sftp_connection = ssh2_connect("地址", "端口");

// 如果是公鑰認證,ssh2_auth_pubkey_file()
ssh2_auth_password($sftp_connection, "用戶名","密碼");

$sftp = ssh2_sftp($sftp_connection);

$remote_uri = sprintf("ssh2.sftp://%s/write/%s", (int) $sftp, "遠程文件名"); // 強轉資源句柄
file_put_contents($remote_uri, file_get_contents("本地文件地址")); // 上傳寫入遠程

大坑注意
這里ssh2_sftp獲取到的資源句柄使用時需要強轉int,官方坑人示例

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28291.html

相關文章

  • CentOS 7.3 填坑之路

    摘要:微軟也意識到了這個問題,于是來了,不僅開源而且跨平臺,前不久已經發布了版本,號稱已經兼容了下的的類庫,并且開發了強大的服務器應用來替代用以跨平臺部署。 前言:被linux和java虐了快1年,筆者的內心是崩潰的,這一年的經歷,更加堅定了擁 護.NET之心,微軟對于開發者真的是太友好了,無論從工具到文檔,乃至技術應用性都是那么為用戶著想,筆者認同一種說法JAVA之所以占有比...

    Caizhenhao 評論0 收藏0
  • PHP中使用CURL,“撩”服務器只需幾行——php curl詳細解析和常見大坑

    摘要:七夕啦,作為開發,妹子沒得撩就撩下服務器吧,妹子有得撩的同學那就左擁妹子右抱服務器吧,況且妹子是要禮物的,服務器又不用。下面我們來看一些常用的情景,我們需要如何打扮自己配置參數才能正確撩妹正確撩到服務器。 七夕啦,作為開發,妹子沒得撩就撩下服務器吧,妹子有得撩的同學那就左擁妹子右抱服務器吧,況且妹子是要禮物的,服務器又不用。好啦,長話短說再長說,祭出今天的工具——CURL(Client...

    SexySix 評論0 收藏0
  • 使用php調用微信接口上傳永久素材

    摘要:功能需求公司新開的公眾號需要將公司平臺現在的所有精品文章都導入,手動導入會有很多的工作量,所以采用自動化同步文章的方式來達到效果開發說明微信提供了新增永久素材的接口,本次功能是基于這個接口進行數據同步的使用到的接口獲取永久素材列表接口新增永 功能需求 公司新開的公眾號需要將公司平臺現在的所有精品文章都導入,手動導入會有很多的工作量,所以采用自動化同步文章的方式來達到效果 開發說明 微信...

    niuxiaowei111 評論0 收藏0
  • php爬蟲】百萬級別知乎用戶數據爬取與分析

    摘要:本程序是抓取知乎的用戶數據,要能訪問用戶個人頁面,需要用戶登錄后的才能訪問。經過查閱資料得知,是因為知乎對圖片做了防盜鏈處理。最終的結果是,用了一個周末就抓取了萬的用戶數據。 代碼托管地址:https://github.com/hoohack/zhihuSpider 這次抓取了110萬的用戶數據,數據分析結果如下:showImg(https://segmentfault.com/img...

    maxmin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<