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

資訊專欄INFORMATION COLUMN

Java程序通過代理訪問網(wǎng)絡(luò)

garfileo / 1723人閱讀

問題背景

最近工作上有開發(fā)爬蟲的任務(wù),對目標(biāo)網(wǎng)站數(shù)據(jù)進(jìn)行抓取,由于大部分網(wǎng)站都在國外,無法直接訪問,需要通過代理才能登錄。爬蟲部署的服務(wù)器在香港,所以爬蟲部署到服務(wù)器后,是可以訪問目標(biāo)網(wǎng)站的,但本地開發(fā)調(diào)試程序時(shí),需要通過代理才能訪問。
這篇文章就帶大家了解一下如何在Java程序中使用代理訪問網(wǎng)絡(luò)。

解決方案

你需要一個(gè)代理服務(wù)器,和一個(gè)可以連接到此服務(wù)器的客戶端。
花點(diǎn)銀子買一個(gè)穩(wěn)定的賬號,或者自己搭建一個(gè)。

這里我使用自己搭建的 Shadowsocks 代理服務(wù)器,使用 Shadowsocks-Windows 作為本地代理的客戶端,并開啟默認(rèn)的 1080 端口,以供本地其他程序通過代理訪問網(wǎng)絡(luò)。

指定 Java 程序的代理服務(wù)器地址和端口
有兩種指定方式:

通過命令行參數(shù)指定
如果只需要考慮代理 HTTP 協(xié)議請求,只需添加 -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080。想要HTTP和HTTPS協(xié)議的請求都通過代理訪問網(wǎng)絡(luò),可以追加上 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080。最終填寫的值為:

-Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=1080

在程序中使用System.setProperty(String, String)
同樣很簡單,這里直接上代碼:

String proxyHost = "127.0.0.1";
String proxyPort = "1080";
      
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
      
// 對https也開啟代理
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", proxyPort);

推薦使用第一種方案,通過VM Option 的方式,對代碼沒有任何侵入,綠色環(huán)保。

測試

這里我在Eclipse中使用第一種方法進(jìn)行測試。

測試代碼

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class Test {

    public static void main(String[] args) throws IOException {
        URL url = new URL("https://google.com");
        URLConnection connection = url.openConnection();
        connection.connect();
        InputStream inputStream = connection.getInputStream();
        byte[] bytes = new byte[1024];
        while (inputStream.read(bytes) >= 0) {
            System.out.println(new String(bytes));
        }
    }
}

測試結(jié)果,可以正常訪問Google等網(wǎng)站。

總結(jié)

除了上述 http.proxyHosthttp.proxyPort,以及 https.proxyHosthttps.proxyPort 在代理時(shí)比較有用外,還有一個(gè)屬性也比較有用,那就是 http.nonProxyHosts,它用來指定哪些主機(jī)不使用代理,如果有多個(gè),用英文豎線(|)分隔,可以使用星號 (*)作為通配符。
下表是常用協(xié)議對應(yīng)的代理屬性:

協(xié)議 屬性(代理主機(jī)/代理端口/不使用代理的主機(jī)列表) 默認(rèn)值
HTTP http.proxyHost
http.proxyPort 80
http.nonProxyHosts
HTTPS https.proxyHost
https.proxyPort 443
https.nonProxyHosts
FTP ftp.proxyHost
ftp.proxyPort 80
ftp.nonProxyHosts
SOCKS socksProxyHost
socksProxyPort 1080

詳細(xì)介紹請參考官方說明:Java Networking and Proxies

原文鏈接:http://xueliang.org/article/detail/20170116145848852

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66495.html

相關(guān)文章

  • Burp Suite抓包講解

    摘要:環(huán)境運(yùn)行時(shí)依賴,需提前安裝環(huán)境。抓包就是將網(wǎng)絡(luò)傳輸發(fā)送與接收的數(shù)據(jù)包進(jìn)行截獲重發(fā)編輯轉(zhuǎn)存等操作,也用來檢查網(wǎng)絡(luò)安全。抓包也經(jīng)常被用來進(jìn)行數(shù)據(jù)截取等。 目錄 Bur...

    不知名網(wǎng)友 評論0 收藏0
  • Java 知識(shí)小集

    摘要:鎖的兩種主要特性互斥同一時(shí)間只允許一個(gè)線程持有某個(gè)特定的鎖。可見性線程釋放鎖之前對共享數(shù)據(jù)做出的更改對于隨后獲得該鎖的另一個(gè)線程是可見的。在商業(yè)上的成功奠定了字符存儲(chǔ)以位即一個(gè)字節(jié)為單位的基礎(chǔ)。 1.鎖的兩種主要特性: 互斥:同一時(shí)間只允許一個(gè)線程持有某個(gè)特定的鎖。線程持有該鎖相當(dāng)于令牌去訪問線程共享的數(shù)據(jù)。可見性:線程釋放鎖之前對共享數(shù)據(jù)做出的更改對于隨后獲得該鎖的另一個(gè)線程是可見的...

    XBaron 評論0 收藏0
  • 深入理解代理模式

    摘要:代理模式代理類中創(chuàng)建一個(gè)真實(shí)對象的實(shí)例模式的核心裝飾者強(qiáng)調(diào)的是增強(qiáng)自身,在被裝飾之后你能夠在被增強(qiáng)的類上使用增強(qiáng)后的功能。 代理模式 在詳細(xì)了解代理模式之前,可能對于像小秋一樣的小白,只知道一些很淺顯的概念,或者就知道遠(yuǎn)程代理啊,靜態(tài)代理啊,動(dòng)態(tài)代理啊,這些看似可以望文生義的專業(yè)名詞,但是如果我告訴你代理模式貫穿了我們生活的方方面面,就比如你現(xiàn)在刷著公眾號的時(shí)候,實(shí)際上就用了遠(yuǎn)程代理模...

    testHs 評論0 收藏0
  • WebService就是這么簡單

    摘要:它使用方式,接收和響應(yīng)外部系統(tǒng)的某種請求。回顧我們在學(xué)習(xí)基礎(chǔ)網(wǎng)絡(luò)編程章節(jié)已經(jīng)知道了這么一個(gè)連接了。使用指定名稱的命名空間。名詞簡單對象訪問協(xié)議作為一個(gè)基于語言的協(xié)議用于有網(wǎng)上傳輸數(shù)據(jù)。以的根元素出現(xiàn)。代理這么一個(gè)概念就更加清晰了。 WebService介紹 首先我們來談一下為什么需要學(xué)習(xí)webService這樣的一個(gè)技術(shù)吧.... 問題一 如果我們的網(wǎng)站需要提供一個(gè)天氣預(yù)報(bào)這樣一個(gè)需求...

    SwordFly 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<