I don't know where the original source is at, however this is modified.
I've fixed a few issues as well as added a "GetAll" function which gets all of the same strings that you want. I'll post examples later.

PHP Code:
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.TreeMap;
import java.util.regex.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class 
HTTPWrapper {

private 
Socket sock;
private 
PrintWriter out;
private 
DataInputStream in;
public 
String cookies;
private 
String lastPage;
private 
String userAgent;
private 
String proxyHost;
private 
int proxyPort;
private 
boolean proxy;
private static 
int timeout 60;

public 
HTTPWrapper() {
    
sock = new Socket();
    
this.userAgent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 (.NET CLR 3.5.30729)";
}

public 
String Post(String urlString data) {
    return 
Request("POST"url""data);
}

public 
String Post(String urlString dataString referrer){
    return 
Request("POST"urlreferrerdata);
}

public 
void ClearCookies(){
    
this.cookies null;
}

public 
String Get(String urlString referer) {
    return 
Request("GET"urlreferernull);
}

public 
String Get(String url){
    return 
Request("GET"urlnullnull);
}

public 
void setProxy(String hostint port) {
    
this.proxyHost host;
    
this.proxyPort port;
}

public 
void useProxy() {
    
this.proxy true;
}

public 
void directConnect() {
    
this.proxy false;
}

public static 
void setTimeout(int ntimeout) {
    
timeout ntimeout;
}

public static 
int getTimeout() {
    return 
timeout;
}

public static 
String inputStreamToString(InputStream inthrows IOException {
    
StringBuilder out = new StringBuilder();
    
byte[] = new byte[4096];
    for (
int n; (in.read(b)) != -1;) {
        
out.append(new String(b0n));
    }
    return 
out.toString();
}

private 
String buildRequestHeader(String methodURL urlString refererString data) {
    
StringBuilder sb = new StringBuilder();
    
sb.append(method " "url.getFile() + " HTTP/1.1\r\n");
    
sb.append("Host: " url.getHost() + "\r\n");
    
sb.append("User-Agent: " this.userAgent "\r\n");
    
sb.append("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
    
sb.append("Accept-Language: en-gb,en;q=0.5\r\n");
    
sb.append("Accept-Encoding: gzip,deflate\r\n");
    
sb.append("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n");
    
sb.append("Keep-Alive: 300\r\n");
    
sb.append("Connection: keep-alive\r\n");
    if(
referer != null && referer.length() > 0) {
        
sb.append("Referer: " referer "\r\n");
        
//System.out.println (sb);
    
}
    if(
this.cookies != null && this.cookies.length() > 0) {
        
sb.append("Cookie: " this.cookies "\r\n");
    }
    if(
data != null && data.length() > 0) {
        
sb.append("Content-Type: application/x-www-form-urlencoded\r\n");
        
sb.append("Content-Length: " data.length() + "\r\n\r\n");
        
sb.append(data "\r\n");
    }
    
sb.append("\r\n");
    
//System.out.println(sb.toString() + "\n\n");

    
return sb.toString();
}

private 
TreeMap<StringStringparseHeader(String data) {

    
TreeMap<StringStringtm = new TreeMap<StringString>();
    
String pat "(.*?): (.*?)$";
    
Matcher match Pattern.compile(patPattern.MULTILINE).matcher(data);

    while(
match.find()) {
        
tm.put(match.group(1).trim(), match.group(2).trim());
    }

    return 
tm;
}

private 
void parseCookies(String data) {

    
//Previous Cookie
    
StringBuilder sb;
    if(
cookies == null) {
        
sb = new StringBuilder();
    } else {
        
sb = new StringBuilder(this.cookies);
    }
    
//Regex Stuff
    
Pattern pattern Pattern.compile("Set-Cookie: (.*?=.*?;)");
    
Matcher match pattern.matcher(data);

    
String tmp;
    
String[] strIde;
    
String curPos;
    
int Start;
    
int End;
    
String nothing;

    while(
match.find()) {
        
String tmpCookie match.group(1);

        
tmp sb.toString();
        
strIde tmpCookie.split("=");

        
String tmpString "";
        if (
sb.indexOf(strIde[0]+"=") != -1)
        {
            
//System.out.println("Temp: ALREADY CONTAINS: " + strIde[0] + "(" + sb.toString() + ")");
            
curPos sb.toString();
            
nothing Between(curPosstrIde[0] + "="";");

            
//System.out.println(nothing);
            
Start curPos.indexOf(strIde[0]);
            
tmpString curPos.substring(Start);
            
String tmpString2 curPos.replace(tmpString"");
            
int tmpEnd curPos.indexOf(nothing) + nothing.length() + tmpString2.length();


            
End curPos.indexOf(nothing) + nothing.length() + 1;

            
//System.out.println("Start: " + Start + " (" + strIde[0] + "); End: " + tmpEnd + " (" + nothing + ")" + " - " + tmpString);
            
sb.delete(StarttmpEnd);

        }

        if(
sb.indexOf(tmpCookie) == -1) {
            
//System.out.println("Temp:" + tmpCookie);
            
sb.append(tmpCookie);
        }
    }
    
this.cookies sb.toString();
}

public 
String Between(String strStringString strStartString strEnd)
    {
        
int intBegin strString.indexOf(strStart) + strStart.length();
        
int intEnd strString.indexOf(strEndintBegin 1);
        return 
strString.substring(intBeginintEnd);
    }

public List<
StringGetAll(String InputString StartString End){
    List<
StringValues = new ArrayList<String>();
    
int Offset 0;
    
    while(
true){
       if(
Input.length() > && Start.length() > && End.length() > && Offset Input.length()){
            
int StartPos = (Input.indexOf(StartOffset) + Start.length());
            if((
StartPos Start.length()) > -&& Input.length() >= StartPos){
                
int Length = (Input.indexOf(EndStartPos) - StartPos);
                if(
Length >-1){
                    
Values.add(Input.substring(StartPosLength));
                    
Offset StartPos Length;
                    continue;
                }
            }
       }
       break;
    }
    return 
Values;
}

private 
String Request(String methodString urlString refererString data) {

    
//Create URL Class
    
URL connectionURL null;
    try {
        
connectionURL = new URL(url);
    } catch (
MalformedURLException ex) {
        
//ex.printStackTrace();
    
}

    
//Create Header and other strings
    
String finalData null;
    
String header this.buildRequestHeader(methodconnectionURLrefererdata);
    
//System.out.println("Built header:" + header);
    //System.out.println(header);
    //System.out.println("\n\n\n");
    
String[] response null;
    
StringBuilder sb = new StringBuilder();

    try {
        
//Check to see if the socket is still connected
        
if(!sock.isConnected() || sock.getInetAddress().getHostName() != connectionURL.getHost()) {
            
sock null;
            
out null;
            
in null;
            
sock = new Socket(connectionURL.getHost(), 80);
            
out = new PrintWriter(sock.getOutputStream(), true);
            
in = new DataInputStream(sock.getInputStream());
            
sock.setSoTimeout(timeout 1000);
            
sock.setKeepAlive(true);
            
//sock.setTrafficClass(0x10);
            
sock.setTcpNoDelay(true);
        }
        
//Send header data
        
if(sock.isConnected()) {
            
out.print(header);
            
out.flush();
        }
        
//Wait and gather response
        
boolean doneReadingHeader false;
        
String rdata;
        while ((
rdata in.readLine()) != null) {
            
rdata rdata.trim();
            if (
rdata.length() < 1) {
                break;
            }
            
sb.append(rdata+"\n");
        }

        
String rHeader sb.toString();
        
//Parse the Header
        
TreeMap<StringStringtm this.parseHeader(rHeader);
        
//Deal with certain content encoding
        
InputStream is null;
        if(
tm.get("Content-Encoding") != null) {
            if(
tm.get("Content-Encoding").equalsIgnoreCase("gzip")) {
                
is = new GZIPInputStream(sock.getInputStream());
                
sb.append(inputStreamToString(is));
            } else if(
tm.get("Content-Encoding").equalsIgnoreCase("deflate")) {
                
is = new InflaterInputStream(sock.getInputStream(), new Inflater(true));
                
sb.append(inputStreamToString(sock.getInputStream()));
            }
        } else {
            
sb.append(inputStreamToString(in));
        }
        
//Deal with what the server wants to do
        
if(tm.get("Connection") != null) {
            if(
tm.get("Connection").equalsIgnoreCase("close")) {
                
out.close();
                
in.close();
                
sock.close();
            }
        }
        
//Get Final Data
        
finalData sb.toString();
        
//Parse Cookies
        
this.parseCookies(finalData);
        } catch (
UnknownHostException ex) {
            
ex.printStackTrace();
        } catch (
IOException ex) {
            
ex.printStackTrace();
        }
        return 
finalData;
}