For the sample htmlget.d,after modification again,now it gets compiled,but when 
it gets running,nothing show in the console:


/*
        HTMLget written by Christopher E. Miller
        This code is public domain.
        You may use it for any purpose.
        This code has no warranties and is provided 'as-is'.
*/


//debug = HTMLGET;


module htmlget;
import std.string, std.conv, std.stream;
import std.socket, std.socketstream;
import std.stdio;

int main(string[] args)
{
        uint addr;
        if(args.length < 2)
        {
                printf("Usage:\n   htmlget <web-page>\n");
                return 0;
        }
        string url = args[1];
        int i;
        
        //i = std.string.find(url, "://");
        i=std.string.indexOf(url,"://");
        if(i != -1)
        {
                if(icmp(url[0 .. i], "http"))
                        throw new Exception("http:// expected");
        }
        
        //i = std.string.find(url, '#');
        i=std.string.indexOf(url,'#');
        if(i != -1) // Remove anchor ref.
                url = url[0 .. i];
        
        //i = std.string.find(url, '/');
        i=std.string.indexOf(url,'/');
        string domain;
        if(i == -1)
        {
                domain = url;
                url = "/";
        }
        else
        {
                domain = url[0 .. i];
                url = url[i .. url.length];
        }
        
        ushort/*uint*/ port;
        //i = std.string.find(domain, ':');
        i=std.string.indexOf(domain,':');
        
        if(i == -1)
        {
                port = 80; // Default HTTP port.
        }
        else
        {
                //port = std.conv.toUshort(domain[i + 1 .. domain.length]);
                port=std.conv.to!(ushort)(domain[i+1..domain.length]);
                domain = domain[0 .. i];
        }
        addr=InternetAddress.parse(domain);
        debug(HTMLGET)
                printf("Connecting to " ~ domain ~ " on port " ~ 
std.string.to!string(port) ~ "...\n");
        
        auto Socket sock = new TcpSocket(new 
std.socket.InternetAddress(addr/*domain*/, port));
        Stream ss = new SocketStream(sock);
        
        debug(HTMLGET)
                printf("Connected!\nRequesting URL \"" ~ url ~ "\"...\n");
        
        if(port != 80)
        {
                char[] temp=cast(char[]) domain;
                temp=temp~cast(char[])":" ~cast(char[]) (to!string(port));
                domain=cast(string)temp;
                //domain = domain ~ ":" ~ std.string.to!string(port);
        }
        ss.writeString("GET " ~ url ~ " HTTP/1.1\r\n"
                "Host: " ~ domain ~ "\r\n"
                "\r\n");
        
        // Skip HTTP header.
        string line;
        for(;;)
        {
                line = cast(string)ss.readLine();
                if(!line.length)
                        break;
                
                const string CONTENT_TYPE_NAME = "Content-Type: ";
                if(line.length > CONTENT_TYPE_NAME.length &&
                        !icmp(CONTENT_TYPE_NAME, line[0 .. 
CONTENT_TYPE_NAME.length]))
                {
                        string type;
                        type = line[CONTENT_TYPE_NAME.length .. line.length];
                        if(type.length <= 5 || icmp("text/", type[0 .. 5]))
                                throw new Exception("URL is not text");
                }
        }
        
        print_lines:
        while(!ss.eof())
        {
                line = cast(string)ss.readLine();
                printf("%.*s\n", line);
                
                //if(std.string.ifind(line, "</html>") != -1)
                //      break;
                size_t iw;
                for(iw = 0; iw != line.length; iw++)
                {
                        if(!icmp("</html>", line[iw .. line.length]))
                                break print_lines;
                }
        }
        
        return 0;
}

Help would be appreciated.

Regards,
Sam

Reply via email to