Skip to content

Commit

Permalink
New method Proxy#create.
Browse files Browse the repository at this point in the history
  • Loading branch information
sutra committed Jun 24, 2020
1 parent 6d3f2d9 commit 48bc73f
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 38 deletions.
15 changes: 15 additions & 0 deletions webmagic-core/src/main/java/us/codecraft/webmagic/proxy/Proxy.java
Expand Up @@ -20,6 +20,21 @@ public class Proxy {

private String password;

public static Proxy create(final URI uri) {
Proxy proxy = new Proxy(uri.getHost(), uri.getPort(), uri.getScheme());
String userInfo = uri.getUserInfo();
if (userInfo != null) {
String[] up = userInfo.split(":");
if (up.length == 1) {
proxy.username = up[0].isEmpty() ? null : up[0];
} else {
proxy.username = up[0].isEmpty() ? null : up[0];
proxy.password = up[1].isEmpty() ? null : up[1];
}
}
return proxy;
}

public Proxy(String host, int port) {
this(host, port, null);
}
Expand Down
116 changes: 78 additions & 38 deletions webmagic-core/src/test/java/us/codecraft/webmagic/proxy/ProxyTest.java
@@ -1,7 +1,9 @@
package us.codecraft.webmagic.proxy;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -15,43 +17,81 @@
*/
public class ProxyTest {

private static List<String[]> httpProxyList = new ArrayList<String[]>();

@BeforeClass
public static void before() {
// String[] source = { "0.0.0.1:0", "0.0.0.2:0", "0.0.0.3:0",
// "0.0.0.4:0" };
String[] source = { "::0.0.0.1:0", "::0.0.0.2:0", "::0.0.0.3:0", "::0.0.0.4:0" };
for (String line : source) {
httpProxyList.add(new String[] {line.split(":")[0], line.split(":")[1], line.split(":")[2], line.split(":")[3] });
}
}

class Fetch extends Thread {
HttpHost hp;

public Fetch(HttpHost hp) {
this.hp = hp;
}

@Override
public void run() {
try {
System.out.println("fetch web page use proxy: " + hp.getHostName() + ":" + hp.getPort());
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

@Test
public void testToString() {
assertEquals("//127.0.0.1:8080", new Proxy("127.0.0.1", 8080).toString());
assertEquals("http://127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "http").toString());
assertEquals("//username:password@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "username", "password").toString());
assertEquals("//username@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "username", null).toString());
assertEquals("//:password@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, null, "password").toString());
}
private static List<String[]> httpProxyList = new ArrayList<String[]>();

@BeforeClass
public static void before() {
// String[] source = { "0.0.0.1:0", "0.0.0.2:0", "0.0.0.3:0",
// "0.0.0.4:0" };
String[] source = { "::0.0.0.1:0", "::0.0.0.2:0", "::0.0.0.3:0", "::0.0.0.4:0" };
for (String line : source) {
httpProxyList.add(new String[] {line.split(":")[0], line.split(":")[1], line.split(":")[2], line.split(":")[3] });
}
}

class Fetch extends Thread {
HttpHost hp;

public Fetch(HttpHost hp) {
this.hp = hp;
}

@Override
public void run() {
try {
System.out.println("fetch web page use proxy: " + hp.getHostName() + ":" + hp.getPort());
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

@Test
public void testCreate() {
Proxy proxy = Proxy.create(URI.create("//127.0.0.1:8080"));
assertNull(proxy.getScheme());
assertNull(proxy.getUsername());
assertNull(proxy.getPassword());
assertEquals("127.0.0.1", proxy.getHost());
assertEquals(8080, proxy.getPort());

proxy = Proxy.create(URI.create("http://127.0.0.1:8080"));
assertEquals("http", proxy.getScheme());
assertNull(proxy.getUsername());
assertNull(proxy.getPassword());
assertEquals("127.0.0.1", proxy.getHost());
assertEquals(8080, proxy.getPort());

proxy = Proxy.create(URI.create("//username:password@127.0.0.1:8080"));
assertNull(proxy.getScheme());
assertEquals("username", proxy.getUsername());
assertEquals("password", proxy.getPassword());
assertEquals("127.0.0.1", proxy.getHost());
assertEquals(8080, proxy.getPort());

proxy = Proxy.create(URI.create("//username@127.0.0.1:8080"));
assertNull(proxy.getScheme());
assertEquals("username", proxy.getUsername());
assertNull(proxy.getPassword());
assertEquals("127.0.0.1", proxy.getHost());
assertEquals(8080, proxy.getPort());

proxy = Proxy.create(URI.create("//:password@127.0.0.1:8080"));
assertNull(proxy.getScheme());
assertNull(proxy.getUsername());
assertEquals("password", proxy.getPassword());
assertEquals("127.0.0.1", proxy.getHost());
assertEquals(8080, proxy.getPort());
}

@Test
public void testToString() {
assertEquals("//127.0.0.1:8080", new Proxy("127.0.0.1", 8080).toString());
assertEquals("http://127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "http").toString());
assertEquals("//username:password@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "username", "password").toString());
assertEquals("//username@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, "username", null).toString());
assertEquals("//:password@127.0.0.1:8080", new Proxy("127.0.0.1", 8080, null, "password").toString());
}

}

0 comments on commit 48bc73f

Please sign in to comment.