HTTP: Difference between revisions

32,607 bytes added ,  5 months ago
m
m (Updated URL.)
m (→‎{{header|Wren}}: Minor tidy)
 
(167 intermediate revisions by 24 users not shown)
Line 1:
{{task|Programming environment operations}}
[[Category:Networking and Web Interaction]]
 
;Task:
SendAccess aand GETprint request to obtain the resource located at thea [[wp:Uniform Resource Locator|URL]]'s "http://www.w3.org/Home.html",content then(the printlocated itresource) to athe console.
 
There is a separate task for [[HTTPS Request]]s.
At least the body of the response should be displayed.<br>
<br><br>
If more information about the response can be obtained without extra code, this should also be displayed.
 
=={{header|8th}}==
The response code must be 200 OK.<br>
<syntaxhighlight lang="forth">
The code must only fail if there exists no resource at the URL; if this happens, the task must be edited.
"http://www.rosettacode.org" net:get drop >s .
</syntaxhighlight>
 
=={{header|ABAP}}==
The code must use minimal function calls, and minimal variable memory.<br>
This works for ABAP Version 7.40 and above
If new code uses less function calls or variable memory, the new code must replace the old code on the page.
<syntaxhighlight lang="abap">
report z_http.
 
cl_http_client=>create_by_url(
The code does not have to be able to handle other types of HTTP request.<br>
exporting
The code does not have to render the content.<br>
url = `http://rosettacode.org/robots.txt`
The code does not have to be able to handle any other HTTP URL.
importing
client = data(http_client)
exceptions
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
others = 4 ).
 
if sy-subrc <> 0.
Where possible the code should only use the standard libraries of the most recent supported version of the language.<br>
data(error_message) = switch string( sy-subrc
Where the task is not possible with the standard libraries, external libraries are accepted.
when 1 then `argument_not_found`
when 2 then `plugin_not_active`
when 3 then `internal_error`
when 4 then `other error` ).
 
write error_message.
Where neither the standard language or external libraries can execute the task, older versions of the language are accepted as long as the version is the most recent, and is specified outside, before the code.
exit.
A link to the external library must also be added to the edit.
endif.
 
data(rest_http_client) = cast if_rest_client( new cl_rest_http_client( http_client ) ).
There is a separate task for [[HTTPS Request]]s.
 
=={{header|8th}}==
rest_http_client->get( ).
<lang 8th>"http://www.w3.org/Home.html" net:get drop >s .</lang>
 
data(response_string) = rest_http_client->get_response_entity( )->get_string_data( ).
 
split response_string at cl_abap_char_utilities=>newline into table data(output_table).
 
=={{header|ABAP}}==
<lang ABAP>report z_http.
cl_http_client => create_by_url(
exporting
url = `http://www.w3.org/Home.html`
importing
client = data(http_client)
exceptions
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
others = 4
).
if sy-subrc <> 0.
data(error_message) = switch string(
sy-subrc
when 1 then `argument_not_found`
when 2 then `plugin_not_active`
when 3 then `internal_error`
when 4 then `other error`
).
write error_message.
exit.
endif.
data(rest_http_client) = cast if_rest_client(new cl_rest_http_client(http_client)).
rest_http_client -> get().
data(response_string) = rest_http_client -> get_response_entity() -> get_string_data().
split response_string at cl_abap_char_utilities => newline into table data(output_table).
loop at output_table assigning field-symbol(<output_line>).
write / <output_line>.
endloop.</lang>
</syntaxhighlight>
 
{{out}}
 
<pre>
User-agent: *
Allow: /mw/images/
Allow: /mw/skins/
Allow: /mw/title.png
Allow: /mw/resources/
Disallow: /w/
Disallow: /mw/
Disallow: /wiki/Special:
</pre>
 
=={{header|ActionScript}}==
<syntaxhighlight lang ="actionscript">package {
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.*;
 
public class RequestExample extends Sprite {
public functionclass RequestExample() {extends Sprite
{
public function RequestExample()
{
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadComplete);
loader.load(new URLRequest("http://www.w3rosettacode.org/Home.html"));
}
private function loadComplete(evt:Event):void {
private function loadComplete(evt:Event):void
{
trace(evt.target.data);
}
}
}
}</lang>
</syntaxhighlight>
 
=={{header|Ada}}==
{{libheader|AWS}}
<syntaxhighlight lang="ada">
<lang ada>with Ada.Text_IO; use Ada.Text_IO;
with Ada.Text_IO; use Ada.Text_IO;
 
with AWS.Client;
with AWS.Response;
 
procedure HTTP_Request is
begin
Put_Line (AWS.Response.Message_Body (AWS.Client.Get (URL => "http://www.w3rosettacode.org/Home.html")));
end HTTP_Request;</lang>
</syntaxhighlight>
 
=={{header|ALGOL 68}}==
{{works with|ALGOL 68|Revision 1 - however ''grep in string'', ''http content'' and ''str error'' are from a non-standard library}}
 
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of ''grep in string'' and ''http content''}}
 
<lang algol68>STRING domain="www.w3.org";
<syntaxhighlight lang="algol68">
STRING page="Home.html";
STRING domain="rosettacode.org";
STRING page="wiki/Main_Page";
 
STRING re success="^HTTP/[0-9.]* 200";
STRING re result description="^HTTP/[0-9.]* [0-9]+ [a-zA-Z ]*";
STRING re doctype ="\s\s<!DOCTYPE html PUBLIC ""[^>]+"">\s+";
 
PROC html page = (REF STRING page) BOOL: (
BOOL out=grep in string(re success, page, NIL, NIL) = 0;
Line 109 ⟶ 133:
out
);
 
IF STRING reply;
INT rc =
Line 116 ⟶ 141:
ELSE print (strerror (rc))
FI
</syntaxhighlight>
</lang>
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="amazing hopper">
#include <hopper.h>
main:
s=`curl -s -L https://rosettacode.org/wiki/HTTP`
{s}len, lenght=0, mov(lenght)
{"Size = ",lenght,"\nContent = \n",s}println
exit(0)
</syntaxhighlight>
{{out}}
<pre>
Size = 402474
Content =
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta charset="UTF-8" />
...
</pre>
 
=={{header|Arturo}}==
 
<lang arturo>print [download "http://www.w3.org/Home.html"]</lang>
<syntaxhighlight lang="rebol">print read "http://rosettacode.org"</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">
<lang AutoHotkey>UrlDownloadToFile, http://www.w3.org/Home.html, url.html
RunUrlDownloadToFile, cmd http:/k type/rosettacode.org, url.html</lang>
Run, cmd /k type url.html
</syntaxhighlight>
 
=={{header|AWK}}==
{{works with|gawk}}
<langsyntaxhighlight lang="awk">BEGIN {
site="wwwen.w3wikipedia.org"
path="/Home.htmlwiki/"
name="Rosetta_Code"
 
server = "/inet/tcp/0/" site "/80"
server = "/inet/tcp/0/" site "/80"
print "GET " path name " HTTP/1.0" |& server
print "Host:GET " sitepath name " HTTP/1.0" |& server
print "\r\n\r\nHost: " site |& server
print "\r\n\r\n" |& server
while ( (server |& getline fish) > 0 ) {
 
if ( ++scale == 1 )
while ( (server |& getline fish) > 0 ) ship = fish{
if ( ++scale == else1 )
ship = ship "\n" fish
}else
ship = ship "\n" fish
close(server)
}
print ship
close(server)
}</lang>
 
print ship
}</syntaxhighlight>
 
=={{header|BaCon}}==
<langsyntaxhighlight lang="qbasic">'
' Read and display a website
website$ = "www.w3.org"
'
IF AMOUNT(ARGUMENT$) = 1 THEN
website$ = "www.basic-converter.org"
ELSE
website$ = TOKEN$(ARGUMENT$, 2)
ENDIF
 
OPEN website$ & ":80" FOR NETWORK AS mynet
SEND "GET /Home.html HTTP/1.1\r\nHost: " & website$ & "\r\n\r\n" TO mynet
REPEAT
RECEIVE dat$ FROM mynet
Line 156 ⟶ 213:
CLOSE NETWORK mynet
PRINT total$
</syntaxhighlight>
</lang>
 
=={{header|Batch File}}==
<syntaxhighlight lang="batch">
<lang batch>curl.exe -s -L http://www.w3.org/Home.html</lang>
curl.exe -s -L http://rosettacode.org/
</syntaxhighlight>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> SYS "LoadLibrary", "URLMON.DLL" TO urlmon%
SYS "GetProcAddress", urlmon%, "URLDownloadToFileA" TO URLDownloadToFile
url$ = "http://www.w3.org"
url$ = "http://www.bbcbasic.co.uk/aboutus.html"
file$ = @tmp$ + "rosetta.tmp"
SYS URLDownloadToFile, 0, url$, file$, 0,= 0@tmp$ TO+ fail%"rosetta.tmp"
SYS URLDownloadToFile, 0, url$, file$, 0, 0 TO fail%
IF fail% ERROR 100, "File download failed"
IF fail% ERROR 100, "File download failed"
OSCLI "TYPE """ + file$ + """"</lang>
OSCLI "TYPE """ + file$ + """"</syntaxhighlight>
 
=={{header|Biferno}}==
simple one-liner using httpExt and quick print $
<lang Biferno>$httpExt.ExecRemote("www.w3.org/Home.html")</lang>
<syntaxhighlight lang="biferno">$httpExt.ExecRemote("www.tabasoft.it")</syntaxhighlight>
 
=={{header|C}}==
{{libheader|libcurl}}
<lang C>#include <unistd.h>
 
#include <netdb.h>
<syntaxhighlight lang="c">
#define BUF_SIZE 16
#include <stdio.h>
int sfd;
#include <stdlib.h>
char buf[BUF_SIZE];
#include <curl/curl.h>
struct addrinfo hints;
 
struct addrinfo * rp;
int main() {
main(void)
hints.ai_family = AF_INET;
{
hints.ai_socktype = SOCK_STREAM;
CURL *curl;
hints.ai_protocol = IPPROTO_TCP;
char buffer[CURL_ERROR_SIZE];
getaddrinfo("www.w3.org", "80", &hints, &rp);
 
sfd = socket(rp -> ai_family, rp -> ai_socktype, rp -> ai_protocol);
if ((curl = curl_easy_init()) != NULL) {
connect(sfd, rp -> ai_addr, rp -> ai_addrlen);
curl_easy_setopt(curl, CURLOPT_URL, "http://www.rosettacode.org/");
write(sfd, "GET /Home.html HTTP/1.1\r\nHost: www.w3.org\r\nConnection: close\r\n\r\n", 1024);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
while (read(sfd, buf, BUF_SIZE) != 0) {
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, buffer);
write(STDOUT_FILENO, buf, BUF_SIZE);
if (curl_easy_perform(curl) != CURLE_OK) {
}
fprintf(stderr, "%s\n", buffer);
close(sfd);
return 0EXIT_FAILURE;
}
}</lang>
curl_easy_cleanup(curl);
}
return EXIT_SUCCESS;
}
</syntaxhighlight>
 
=={{header|C sharp}}==
<syntaxhighlight lang ="csharp">using System;
using System;
using System.Text;
using System.Net;
 
class Program {
class Program
static void Main(string[] args) {
{
static void Main(string[] args)
{
WebClient wc = new WebClient();
string content = wc.DownloadString("http://www.w3google.org/Home.htmlcom");
Console.WriteLine(content);
}
}
}</lang>
</syntaxhighlight>
 
=={{header|C++}}==
<syntaxhighlight lang="cpp">
<lang cpp>#include <winsock2.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
 
addrinfo * result;
int bytes;
char buffer[512];
addrinfo hints;
SOCKET s;
WSADATA wsaData;
int main() {
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
WSAStartup( MAKEWORD( 2, 2 ), &wsaData );
ZeroMemory(&hints, sizeof(hints));
 
hints.ai_family = AF_UNSPEC;
addrinfo *result = NULL;
hints.ai_socktype = SOCK_STREAM;
addrinfo hints;
hints.ai_protocol = IPPROTO_TCP;
 
getaddrinfo("www.w3.org", "80", &hints, &result);
ZeroMemory( &hints, sizeof( hints ) );
s = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
hints.ai_family = AF_UNSPEC;
connect(s, result->ai_addr, (int) result->ai_addrlen);
hints.ai_socktype = SOCK_STREAM;
freeaddrinfo(result);
hints.ai_protocol = IPPROTO_TCP;
send(s, "GET /Home.html HTTP/1.0\n\n", 16, 0);
 
do {
getaddrinfo( "74.125.45.100", "80", &hints, &result ); // http://www.google.com
bytes = recv(s, buffer, 512, 0);
 
if ( bytes > 0 )
SOCKET s = socket( result->ai_family, result->ai_socktype, result->ai_protocol );
std::cout.write(buffer, bytes);
 
} while (bytes > 0);
connect( s, result->ai_addr, (int)result->ai_addrlen );
return 0;
 
}</lang>
freeaddrinfo( result );
 
send( s, "GET / HTTP/1.0\n\n", 16, 0 );
 
char buffer[512];
int bytes;
 
do {
bytes = recv( s, buffer, 512, 0 );
 
if ( bytes > 0 )
std::cout.write(buffer, bytes);
} while ( bytes > 0 );
 
return 0;
}
</syntaxhighlight>
 
{{libheader|U++}}
 
<lang cpp>#include <Web/Web.h>
<syntaxhighlight lang="cpp">
#include <Web/Web.h>
 
using namespace Upp;
 
CONSOLE_APP_MAIN {
CONSOLE_APP_MAIN
Cout() << HttpClient("www.w3.org/Home.html").ExecuteRedirect();
{
}</lang>
Cout() << HttpClient("www.rosettacode.org").ExecuteRedirect();
}
</syntaxhighlight>
 
=={{header|Caché ObjectScript}}==
Line 248 ⟶ 340:
<pre>
USER>Set HttpRequest=##class(%Net.HttpRequest).%New()
USER>Set HttpRequest.Server="wwwcheckip.w3dyndns.org"
USER>Do HttpRequest.Get("/Home.html")
USER>Do HttpRequest.HttpResponse.Data.OutputToDevice()
</pre>
Line 255 ⟶ 347:
=={{header|Clojure}}==
Using the Java API:
<langsyntaxhighlight lang="clojure">(
(defn get-http [url]
(let [sc (java.util.Scanner.
(
let [sc (java.util.Scanner.(.openStream (java.net.URL. url)))]
(while (.hasNext (sc)
while(println (.hasNextnextLine sc) ))))
(get-http "http://www.rosettacode.org")
(
</syntaxhighlight>
println (.nextLine sc)
 
)
)
)
)
(get-http "http://www.w3.org")</lang>
Using <code>clojure.contrib.http.agent</code>:
<langsyntaxhighlight lang="clojure">(
(ns example
(:use [clojure.contrib.http.agent :only (string http-agent)]))
(
 
:use [clojure.contrib.http.agent :only (string http-agent)]
(println (string (http-agent "http://www.rosettacode.org/")))
)
</syntaxhighlight>
)
 
(println (string (http-agent "http://www.w3.org/")))</lang>
{{works with|Clojure|1.2}}
<syntaxhighlight lang="clojure">
<lang clojure>(print (slurp "http://www.w3.org/"))</lang>
(print (slurp "http://www.rosettacode.org/"))
</syntaxhighlight>
 
=={{header|COBOL}}==
 
Tested with GnuCOBOL
<lang cobol>COBOL
 
<syntaxhighlight lang="cobol">COBOL >>SOURCE FORMAT IS FIXED
identification division.
identification division.
program-id. curl-rosetta.
 
environment division.
program-id.
configuration section.
curl-write-callback.
environment division repository.
function read-url
function all intrinsic.
 
data division.
configuration section.
working-storage section.
repository.
function all intrinsic.
 
copy "gccurlsym.cpy".
data division.
 
01 web-page pic x(16777216).
working-storage section.
01 realcurl-sizestatus usage binary-long.
01 memory-block based.
05 memory-address usage pointer sync.
05 memory-size usage binary-long sync.
05 running-total usage binary-long sync.
01 content-buffer pic x(65536) based.
01 web-space pic x(16777216) based.
01 left-over usage binary-long.
linkage section.
01 contents usage pointer.
01 element-size usage binary-long.
01 element-count usage binary-long.
01 memory-structure usage pointer.
procedure division using
by value contents
by value element-size
by value element-count
by value memory-structure
returning real-size.
set address of memory-block to memory-structure
compute real-size = element-size * element-count
end-compute
compute left-over = memory-size - running-total
end-compute
if left-over > 0 and < real-size then
move left-over to real-size
end-if
if (left-over > 0) and (real-size > 1) then
set address of content-buffer to contents
set address of web-space to memory-address
move content-buffer(1:real-size) to web-space(running-total:real-size)
add real-size to running-total
else
display "curl buffer sizing problem" upon syserr
end-if
goback.
end program curl-write-callback.
 
01 cli pic x(7) external.
identification division.
88 helping values "-h", "-help", "help", spaces.
88 displaying value "display".
88 summarizing value "summary".
 
*> ***************************************************************
function-id.
procedure division.
read-url.
accept cli from command-line
environment division.
if helping then
display "./curl-rosetta [help|display|summary]"
goback
end-if
 
*>
configuration section.
*> Read a web resource into fixed ram.
repository.
*> Caller is in charge of sizing the buffer,
function all intrinsic.
*> (or getting trickier with the write callback)
*> Pass URL and working-storage variable,
data division.
*> get back libcURL error code or 0 for success
working-storage section.
copy "gccurlsym.cpy".
replace also ==:CALL-EXCEPTION:== by == on exception perform hard-exception ==.
01 curl-handle usage pointer.
01 callback-handle usage procedure-pointer.
01 memory-block.
05 memory-address usage pointer sync.
05 memory-size usage binary-long sync.
05 running-total usage binary-long sync.
01 curl-result usage binary-long.
01 cli pic x(7) external.
88 helping values "-h", "-help", "help", spaces.
88 displaying value "display".
88 summarizing value "summary".
linkage section.
01 url pic x any length.
01 buffer pic x any length.
01 curl-status usage binary-long.
procedure division using
url buffer
returning curl-status.
if displaying or summarizing then
display "Read: " url upon syserr
end-if
call "curl_global_init" using
by value CURL_GLOBAL_ALL on exception
display "need libcurl, link with -lcurl" upon syserr
stop run returning 1
end-call
call "curl_easy_init"
returning curl-handle :CALL-EXCEPTION:
end-call
if curl-handle equal NULL then
display "no curl handle" upon syserr
stop run returning 1
end-if
call "curl_easy_setopt" using
by value curl-handle
by value CURLOPT_URL
by reference concatenate(trim(url trailing), x"00") :CALL-EXCEPTION:
end-call
call "curl_easy_setopt" using
by value curl-handle
by value CURLOPT_FOLLOWLOCATION
by value 1 :CALL-EXCEPTION:
end-call
set callback-handle to address of entry "curl-write-callback"
call "curl_easy_setopt" using
by value curl-handle
by value CURLOPT_WRITEFUNCTION
by value callback-handle :CALL-EXCEPTION:
end-call
set memory-address to address of buffer
move length(buffer) to memory-size
move 1 to running-total
call "curl_easy_setopt" using
by value curl-handle
by value CURLOPT_WRITEDATA
by value address of memory-block :CALL-EXCEPTION:
end-call
call "curl_easy_setopt" using
by value curl-handle
by value CURLOPT_USERAGENT
by reference concatenate("libcurl-agent/1.0", x"00") :CALL-EXCEPTION:
end-call
call "curl_easy_perform" using
by value curl-handle
returning curl-result :CALL-EXCEPTION:
end-call
move curl-result to curl-status
call "curl_easy_cleanup" using
by value curl-handle
returning omitted :CALL-EXCEPTION:
end-call
goback.
:EXCEPTION-HANDLERS:
end function read-url.
 
move read-url("http://www.rosettacode.org", web-page)
identification division.
to curl-status
 
perform check
program-id.
perform show
curl-rosetta.
 
environment division.
goback.
*> ***************************************************************
configuration section.
 
repository.
*> Now tesing the result, relying on the gccurlsym
function read-url function all intrinsic.
*> GnuCOBOL Curl Symbol copy book
data division check.
if curl-status not equal zero then
display
working-storage section.
curl-status " "
copy "gccurlsym.cpy".
CURLEMSG(curl-status) upon syserr
01 web-page pic x(16777216).
01 curl-status usage binaryend-long.if
01 cli pic x(7) external.
 
88 helping values "-h", "-help", "help", spaces.
*> And 88 displaying value "display". the page
show.
88 summarizing value "summary".
if summarizing then
display "Length: " stored-char-length(web-page)
procedure division.
end-if
if displaying then
accept cli from command-line
display trim(web-page trailing) with no advancing
if helping then
end-if
display "./curl-rosetta [help|display|summary]" goback
end-if .
 
move read-url("http://www.rosettacode.org", web-page) to curl-status
REPLACE ALSO ==:EXCEPTION-HANDLERS:== BY
perform check
perform show goback.==
*> informational warnings and abends
check.
soft-exception.
if curl-status not equal zero then
display curl-status " " CURLEMSG(curl-status)space upon syserr
display "--Exception Report-- " upon syserr
end-if.
display "Time of exception: " current-date upon syserr
show.
display "Module: " module-id upon syserr
if summarizing then
display "LengthModule-path: " storedmodule-char-length(web-page)path upon syserr
display "Module-source: " module-source upon syserr
end-if
display "Exception-file: " exception-file upon syserr
if displaying then
display trim(web"Exception-pagestatus: trailing) with no advancing" exception-status upon syserr
display "Exception-location: " exception-location upon syserr
end-if.
display "Exception-statement: " exception-statement upon syserr
REPLACE ALSO == :EXCEPTION-HANDLERS: == BY == soft-exception.
display space upon syserr.
 
display "--Exception Report-- " upon syserr
display "Time of hard-exception: " current-date upon syserr.
display "Module: perform " modulesoft-id upon syserrexception
stop run returning 127
display "Module-path: " module-path upon syserr
.
display "Module-source: " module-source upon syserr
==.
display "Exception-file: " exception-file upon syserr
 
display "Exception-status: " exception-status upon syserr
end program curl-rosetta.
display "Exception-location: " exception-location upon syserr
*> ***************************************************************
display "Exception-statement: " exception-statement upon syserr.
 
hard-exception.
*> ***************************************************************
perform soft-exception stop run returning 127.
==. *>
*> The function hiding all the curl details
end program curl-rosetta.</lang>
*>
Copybook :
*> Purpose: Call libcURL and read into memory
<lang cobol>01 CURL_MAX_HTTP_HEADER CONSTANT AS 102400.
*> ***************************************************************
78 CURL_GLOBAL_ALL VALUE 3.
identification division.
78 CURLOPT_FOLLOWLOCATION VALUE 52.
function-id. read-url.
78 CURLOPT_WRITEDATA VALUE 10001.
 
78 CURLOPT_URL VALUE 10002.
environment division.
78 CURLOPT_USERAGENT VALUE 10018.
configuration section.
78 CURLOPT_WRITEFUNCTION VALUE 20011.
repository.
78 CURLOPT_COOKIEFILE VALUE 10031.
function all intrinsic.
78 CURLOPT_COOKIEJAR VALUE 10082.
 
78 CURLOPT_COOKIELIST VALUE 10135.
data division.
78 CURLINFO_COOKIELIST VALUE 4194332.
working-storage section.
78 CURLE_OK VALUE 0.
 
78 CURLE_UNSUPPORTED_PROTOCOL VALUE 1.
copy "gccurlsym.cpy".
78 CURLE_FAILED_INIT VALUE 2.
 
78 CURLE_URL_MALFORMAT VALUE 3.
replace also ==:CALL-EXCEPTION:== by
78 CURLE_OBSOLETE4 VALUE 4.
==
78 CURLE_COULDNT_RESOLVE_PROXY VALUE 5.
on exception
78 CURLE_COULDNT_RESOLVE_HOST VALUE 6.
perform hard-exception
78 CURLE_COULDNT_CONNECT VALUE 7.
==.
78 CURLE_FTP_WEIRD_SERVER_REPLY VALUE 8.
 
78 CURLE_REMOTE_ACCESS_DENIED VALUE 9.
01 curl-handle usage pointer.
78 CURLE_OBSOLETE10 VALUE 10.
01 callback-handle usage procedure-pointer.
78 CURLE_FTP_WEIRD_PASS_REPLY VALUE 11.
01 memory-block.
78 CURLE_OBSOLETE12 VALUE 12.
05 memory-address usage pointer sync.
78 CURLE_FTP_WEIRD_PASV_REPLY VALUE 13.
05 memory-size usage binary-long sync.
78 CURLE_FTP_WEIRD_227_FORMAT VALUE 14.
05 running-total usage binary-long sync.
78 CURLE_FTP_CANT_GET_HOST VALUE 15.
01 curl-result usage binary-long.
78 CURLE_OBSOLETE16 VALUE 16.
 
78 CURLE_FTP_COULDNT_SET_TYPE VALUE 17.
01 cli pic x(7) external.
78 CURLE_PARTIAL_FILE VALUE 18.
88 helping values "-h", "-help", "help", spaces.
78 CURLE_FTP_COULDNT_RETR_FILE VALUE 19.
88 displaying value "display".
78 CURLE_OBSOLETE20 VALUE 20.
88 summarizing value "summary".
78 CURLE_QUOTE_ERROR VALUE 21.
 
78 CURLE_HTTP_RETURNED_ERROR VALUE 22.
linkage section.
78 CURLE_WRITE_ERROR VALUE 23.
01 url pic x any length.
78 CURLE_OBSOLETE24 VALUE 24.
01 buffer pic x any length.
78 CURLE_UPLOAD_FAILED VALUE 25.
01 curl-status usage binary-long.
78 CURLE_READ_ERROR VALUE 26.
 
78 CURLE_OUT_OF_MEMORY VALUE 27.
*> ***************************************************************
78 CURLE_OPERATION_TIMEDOUT VALUE 28.
procedure division using url buffer returning curl-status.
78 CURLE_OBSOLETE29 VALUE 29.
if displaying or summarizing then
78 CURLE_FTP_PORT_FAILED VALUE 30.
display "Read: " url upon syserr
78 CURLE_FTP_COULDNT_USE_REST VALUE 31.
end-if
78 CURLE_OBSOLETE32 VALUE 32.
 
78 CURLE_RANGE_ERROR VALUE 33.
*> initialize libcurl, hint at missing library if need be
78 CURLE_HTTP_POST_ERROR VALUE 34.
call "curl_global_init" using by value CURL_GLOBAL_ALL
78 CURLE_SSL_CONNECT_ERROR VALUE 35.
on exception
78 CURLE_BAD_DOWNLOAD_RESUME VALUE 36.
display
78 CURLE_FILE_COULDNT_READ_FILE VALUE 37.
"need libcurl, link with -lcurl" upon syserr
78 CURLE_LDAP_CANNOT_BIND VALUE 38.
stop run returning 1
78 CURLE_LDAP_SEARCH_FAILED VALUE 39.
end-call
78 CURLE_OBSOLETE40 VALUE 40.
 
78 CURLE_FUNCTION_NOT_FOUND VALUE 41.
*> initialize handle
78 CURLE_ABORTED_BY_CALLBACK VALUE 42.
call "curl_easy_init" returning curl-handle
78 CURLE_BAD_FUNCTION_ARGUMENT VALUE 43.
:CALL-EXCEPTION:
78 CURLE_OBSOLETE44 VALUE 44.
end-call
78 CURLE_INTERFACE_FAILED VALUE 45.
if curl-handle equal NULL then
78 CURLE_OBSOLETE46 VALUE 46.
display "no curl handle" upon syserr
78 CURLE_TOO_MANY_REDIRECTS VALUE 47.
stop run returning 1
78 CURLE_UNKNOWN_TELNET_OPTION VALUE 48.
end-if
78 CURLE_TELNET_OPTION_SYNTAX VALUE 49.
 
78 CURLE_OBSOLETE50 VALUE 50.
*> Set the URL
78 CURLE_PEER_FAILED_VERIFICATION VALUE 51.
call "curl_easy_setopt" using
78 CURLE_GOT_NOTHING VALUE 52.
by value curl-handle
78 CURLE_SSL_ENGINE_NOTFOUND VALUE 53.
by value CURLOPT_URL
78 CURLE_SSL_ENGINE_SETFAILED VALUE 54.
by reference concatenate(trim(url trailing), x"00")
78 CURLE_SEND_ERROR VALUE 55.
:CALL-EXCEPTION:
78 CURLE_RECV_ERROR VALUE 56.
end-call
78 CURLE_OBSOLETE57 VALUE 57.
 
78 CURLE_SSL_CERTPROBLEM VALUE 58.
*> follow all redirects
78 CURLE_SSL_CIPHER VALUE 59.
call "curl_easy_setopt" using
78 CURLE_SSL_CACERT VALUE 60.
by value curl-handle
78 CURLE_BAD_CONTENT_ENCODING VALUE 61.
by value CURLOPT_FOLLOWLOCATION
78 CURLE_LDAP_INVALID_URL VALUE 62.
by value 1
78 CURLE_FILESIZE_EXCEEDED VALUE 63.
:CALL-EXCEPTION:
78 CURLE_USE_SSL_FAILED VALUE 64.
end-call
78 CURLE_SEND_FAIL_REWIND VALUE 65.
 
78 CURLE_SSL_ENGINE_INITFAILED VALUE 66.
*> set the call back to write to memory
78 CURLE_LOGIN_DENIED VALUE 67.
set callback-handle to address of entry "curl-write-callback"
78 CURLE_TFTP_NOTFOUND VALUE 68.
call "curl_easy_setopt" using
78 CURLE_TFTP_PERM VALUE 69.
by value curl-handle
78 CURLE_REMOTE_DISK_FULL VALUE 70.
by value CURLOPT_WRITEFUNCTION
78 CURLE_TFTP_ILLEGAL VALUE 71.
by value callback-handle
78 CURLE_TFTP_UNKNOWNID VALUE 72.
:CALL-EXCEPTION:
78 CURLE_REMOTE_FILE_EXISTS VALUE 73.
end-call
78 CURLE_TFTP_NOSUCHUSER VALUE 74.
 
78 CURLE_CONV_FAILED VALUE 75.
*> set the curl handle data handling structure
78 CURLE_CONV_REQD VALUE 76.
set memory-address to address of buffer
78 CURLE_SSL_CACERT_BADFILE VALUE 77.
move length(buffer) to memory-size
78 CURLE_REMOTE_FILE_NOT_FOUND VALUE 78.
move 1 to running-total
78 CURLE_SSH VALUE 79.
 
78 CURLE_SSL_SHUTDOWN_FAILED VALUE 80.
call "curl_easy_setopt" using
78 CURLE_AGAIN VALUE 81.
by value curl-handle
01 LIBCURL_ERRORS.
by value CURLOPT_WRITEDATA
02 CURLEVALUES.
by value address of memory-block
03 FILLER PIC X(30) VALUE "CURLE_UNSUPPORTED_PROTOCOL ".
:CALL-EXCEPTION:
03 FILLER PIC X(30) VALUE "CURLE_FAILED_INIT ".
end-call
03 FILLER PIC X(30) VALUE "CURLE_URL_MALFORMAT ".
 
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE4 ".
*> some servers demand an agent
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_RESOLVE_PROXY ".
call "curl_easy_setopt" using
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_RESOLVE_HOST ".
by value curl-handle
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_CONNECT ".
by value CURLOPT_USERAGENT
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_SERVER_REPLY ".
by reference concatenate("libcurl-agent/1.0", x"00")
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_ACCESS_DENIED ".
:CALL-EXCEPTION:
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE10 ".
end-call
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_PASS_REPLY ".
 
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE12 ".
*> let curl do all the hard work
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_PASV_REPLY ".
call "curl_easy_perform" using
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_227_FORMAT ".
by value curl-handle
03 FILLER PIC X(30) VALUE "CURLE_FTP_CANT_GET_HOST ".
returning curl-result
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE16 ".
:CALL-EXCEPTION:
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_SET_TYPE ".
end-call
03 FILLER PIC X(30) VALUE "CURLE_PARTIAL_FILE ".
 
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_RETR_FILE ".
*> the call back will handle filling ram, return the result code
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE20 ".
move curl-result to curl-status
03 FILLER PIC X(30) VALUE "CURLE_QUOTE_ERROR ".
 
03 FILLER PIC X(30) VALUE "CURLE_HTTP_RETURNED_ERROR ".
*> curl clean up, more important if testing cookies
03 FILLER PIC X(30) VALUE "CURLE_WRITE_ERROR ".
call "curl_easy_cleanup" using
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE24 ".
by value curl-handle
03 FILLER PIC X(30) VALUE "CURLE_UPLOAD_FAILED ".
returning omitted
03 FILLER PIC X(30) VALUE "CURLE_READ_ERROR ".
:CALL-EXCEPTION:
03 FILLER PIC X(30) VALUE "CURLE_OUT_OF_MEMORY ".
end-call
03 FILLER PIC X(30) VALUE "CURLE_OPERATION_TIMEDOUT ".
 
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE29 ".
goback.
03 FILLER PIC X(30) VALUE "CURLE_FTP_PORT_FAILED ".
 
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_USE_REST ".
:EXCEPTION-HANDLERS:
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE32 ".
 
03 FILLER PIC X(30) VALUE "CURLE_RANGE_ERROR ".
end function read-url.
03 FILLER PIC X(30) VALUE "CURLE_HTTP_POST_ERROR ".
*> ***************************************************************
03 FILLER PIC X(30) VALUE "CURLE_SSL_CONNECT_ERROR ".
 
03 FILLER PIC X(30) VALUE "CURLE_BAD_DOWNLOAD_RESUME ".
*> ***************************************************************
03 FILLER PIC X(30) VALUE "CURLE_FILE_COULDNT_READ_FILE ".
*> Supporting libcurl callback
03 FILLER PIC X(30) VALUE "CURLE_LDAP_CANNOT_BIND ".
identification division.
03 FILLER PIC X(30) VALUE "CURLE_LDAP_SEARCH_FAILED ".
program-id. curl-write-callback.
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE40 ".
 
03 FILLER PIC X(30) VALUE "CURLE_FUNCTION_NOT_FOUND ".
environment division.
03 FILLER PIC X(30) VALUE "CURLE_ABORTED_BY_CALLBACK ".
configuration section.
03 FILLER PIC X(30) VALUE "CURLE_BAD_FUNCTION_ARGUMENT ".
repository.
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE44 ".
function all intrinsic.
03 FILLER PIC X(30) VALUE "CURLE_INTERFACE_FAILED ".
 
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE46 ".
data division.
03 FILLER PIC X(30) VALUE "CURLE_TOO_MANY_REDIRECTS ".
working-storage section.
03 FILLER PIC X(30) VALUE "CURLE_UNKNOWN_TELNET_OPTION ".
01 real-size usage binary-long.
03 FILLER PIC X(30) VALUE "CURLE_TELNET_OPTION_SYNTAX ".
 
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE50 ".
*> libcURL will pass a pointer to this structure in the callback
03 FILLER PIC X(30) VALUE "CURLE_PEER_FAILED_VERIFICATION".
03 FILLER PIC X(30)01 VALUEmemory-block "CURLE_GOT_NOTHING "based.
05 memory-address usage pointer sync.
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_NOTFOUND ".
05 memory-size usage binary-long sync.
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_SETFAILED ".
03 FILLER PIC X(30) VALUE "CURLE_SEND_ERROR 05 running-total usage binary-long "sync.
 
03 FILLER PIC X(30) VALUE "CURLE_RECV_ERROR ".
01 content-buffer pic x(65536) based.
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE57 ".
03 FILLER PIC X(30)01 VALUEweb-space "CURLE_SSL_CERTPROBLEM " pic x(16777216) based.
03 FILLER PIC X(30)01 VALUEleft-over "CURLE_SSL_CIPHER usage "binary-long.
 
03 FILLER PIC X(30) VALUE "CURLE_SSL_CACERT ".
linkage section.
03 FILLER PIC X(30) VALUE "CURLE_BAD_CONTENT_ENCODING ".
03 FILLER PIC X(30)01 VALUEcontents "CURLE_LDAP_INVALID_URL " usage pointer.
01 element-size usage binary-long.
03 FILLER PIC X(30) VALUE "CURLE_FILESIZE_EXCEEDED ".
03 FILLER PIC X(30)01 VALUEelement-count "CURLE_USE_SSL_FAILED usage "binary-long.
01 memory-structure usage pointer.
03 FILLER PIC X(30) VALUE "CURLE_SEND_FAIL_REWIND ".
 
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_INITFAILED ".
*> ***************************************************************
03 FILLER PIC X(30) VALUE "CURLE_LOGIN_DENIED ".
procedure division
03 FILLER PIC X(30) VALUE "CURLE_TFTP_NOTFOUND ".
using
03 FILLER PIC X(30) VALUE "CURLE_TFTP_PERM ".
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_DISK_FULL by value ".contents
03 FILLER PIC X(30) VALUE "CURLE_TFTP_ILLEGAL by value ".element-size
03 FILLER PIC X(30) VALUE "CURLE_TFTP_UNKNOWNID by value ".element-count
by value memory-structure
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_FILE_EXISTS ".
returning real-size.
03 FILLER PIC X(30) VALUE "CURLE_TFTP_NOSUCHUSER ".
 
03 FILLER PIC X(30) VALUE "CURLE_CONV_FAILED ".
set address of memory-block to memory-structure
03 FILLER PIC X(30) VALUE "CURLE_CONV_REQD ".
compute real-size = element-size * element-count end-compute
03 FILLER PIC X(30) VALUE "CURLE_SSL_CACERT_BADFILE ".
 
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_FILE_NOT_FOUND ".
*> Fence off the end of buffer
03 FILLER PIC X(30) VALUE "CURLE_SSH ".
compute
03 FILLER PIC X(30) VALUE "CURLE_SSL_SHUTDOWN_FAILED ".
left-over = memory-size - running-total
03 FILLER PIC X(30) VALUE "CURLE_AGAIN ".
end-compute
01 FILLER REDEFINES LIBCURL_ERRORS.
if left-over > 0 and < real-size then
02 CURLEMSG OCCURS 81 TIMES PIC X(30).</lang>
move left-over to real-size
end-if
 
*> if there is more buffer, and data not zero length
if (left-over > 0) and (real-size > 1) then
set address of content-buffer to contents
set address of web-space to memory-address
 
move content-buffer(1:real-size)
to web-space(running-total:real-size)
 
add real-size to running-total
else
display "curl buffer sizing problem" upon syserr
end-if
 
goback.
end program curl-write-callback.</syntaxhighlight>
 
and a copybook
 
<syntaxhighlight lang="cobol"> *> manifest constants for libcurl
*> Usage: COPY occurlsym inside data division
*> Taken from include/curl/curl.h 2013-12-19
 
*> Functional enums
01 CURL_MAX_HTTP_HEADER CONSTANT AS 102400.
 
78 CURL_GLOBAL_ALL VALUE 3.
 
78 CURLOPT_FOLLOWLOCATION VALUE 52.
78 CURLOPT_WRITEDATA VALUE 10001.
78 CURLOPT_URL VALUE 10002.
78 CURLOPT_USERAGENT VALUE 10018.
78 CURLOPT_WRITEFUNCTION VALUE 20011.
78 CURLOPT_COOKIEFILE VALUE 10031.
78 CURLOPT_COOKIEJAR VALUE 10082.
78 CURLOPT_COOKIELIST VALUE 10135.
 
*> Informationals
78 CURLINFO_COOKIELIST VALUE 4194332.
 
*> Result codes
78 CURLE_OK VALUE 0.
*> Error codes
78 CURLE_UNSUPPORTED_PROTOCOL VALUE 1.
78 CURLE_FAILED_INIT VALUE 2.
78 CURLE_URL_MALFORMAT VALUE 3.
78 CURLE_OBSOLETE4 VALUE 4.
78 CURLE_COULDNT_RESOLVE_PROXY VALUE 5.
78 CURLE_COULDNT_RESOLVE_HOST VALUE 6.
78 CURLE_COULDNT_CONNECT VALUE 7.
78 CURLE_FTP_WEIRD_SERVER_REPLY VALUE 8.
78 CURLE_REMOTE_ACCESS_DENIED VALUE 9.
78 CURLE_OBSOLETE10 VALUE 10.
78 CURLE_FTP_WEIRD_PASS_REPLY VALUE 11.
78 CURLE_OBSOLETE12 VALUE 12.
78 CURLE_FTP_WEIRD_PASV_REPLY VALUE 13.
78 CURLE_FTP_WEIRD_227_FORMAT VALUE 14.
78 CURLE_FTP_CANT_GET_HOST VALUE 15.
78 CURLE_OBSOLETE16 VALUE 16.
78 CURLE_FTP_COULDNT_SET_TYPE VALUE 17.
78 CURLE_PARTIAL_FILE VALUE 18.
78 CURLE_FTP_COULDNT_RETR_FILE VALUE 19.
78 CURLE_OBSOLETE20 VALUE 20.
78 CURLE_QUOTE_ERROR VALUE 21.
78 CURLE_HTTP_RETURNED_ERROR VALUE 22.
78 CURLE_WRITE_ERROR VALUE 23.
78 CURLE_OBSOLETE24 VALUE 24.
78 CURLE_UPLOAD_FAILED VALUE 25.
78 CURLE_READ_ERROR VALUE 26.
78 CURLE_OUT_OF_MEMORY VALUE 27.
78 CURLE_OPERATION_TIMEDOUT VALUE 28.
78 CURLE_OBSOLETE29 VALUE 29.
78 CURLE_FTP_PORT_FAILED VALUE 30.
78 CURLE_FTP_COULDNT_USE_REST VALUE 31.
78 CURLE_OBSOLETE32 VALUE 32.
78 CURLE_RANGE_ERROR VALUE 33.
78 CURLE_HTTP_POST_ERROR VALUE 34.
78 CURLE_SSL_CONNECT_ERROR VALUE 35.
78 CURLE_BAD_DOWNLOAD_RESUME VALUE 36.
78 CURLE_FILE_COULDNT_READ_FILE VALUE 37.
78 CURLE_LDAP_CANNOT_BIND VALUE 38.
78 CURLE_LDAP_SEARCH_FAILED VALUE 39.
78 CURLE_OBSOLETE40 VALUE 40.
78 CURLE_FUNCTION_NOT_FOUND VALUE 41.
78 CURLE_ABORTED_BY_CALLBACK VALUE 42.
78 CURLE_BAD_FUNCTION_ARGUMENT VALUE 43.
78 CURLE_OBSOLETE44 VALUE 44.
78 CURLE_INTERFACE_FAILED VALUE 45.
78 CURLE_OBSOLETE46 VALUE 46.
78 CURLE_TOO_MANY_REDIRECTS VALUE 47.
78 CURLE_UNKNOWN_TELNET_OPTION VALUE 48.
78 CURLE_TELNET_OPTION_SYNTAX VALUE 49.
78 CURLE_OBSOLETE50 VALUE 50.
78 CURLE_PEER_FAILED_VERIFICATION VALUE 51.
78 CURLE_GOT_NOTHING VALUE 52.
78 CURLE_SSL_ENGINE_NOTFOUND VALUE 53.
78 CURLE_SSL_ENGINE_SETFAILED VALUE 54.
78 CURLE_SEND_ERROR VALUE 55.
78 CURLE_RECV_ERROR VALUE 56.
78 CURLE_OBSOLETE57 VALUE 57.
78 CURLE_SSL_CERTPROBLEM VALUE 58.
78 CURLE_SSL_CIPHER VALUE 59.
78 CURLE_SSL_CACERT VALUE 60.
78 CURLE_BAD_CONTENT_ENCODING VALUE 61.
78 CURLE_LDAP_INVALID_URL VALUE 62.
78 CURLE_FILESIZE_EXCEEDED VALUE 63.
78 CURLE_USE_SSL_FAILED VALUE 64.
78 CURLE_SEND_FAIL_REWIND VALUE 65.
78 CURLE_SSL_ENGINE_INITFAILED VALUE 66.
78 CURLE_LOGIN_DENIED VALUE 67.
78 CURLE_TFTP_NOTFOUND VALUE 68.
78 CURLE_TFTP_PERM VALUE 69.
78 CURLE_REMOTE_DISK_FULL VALUE 70.
78 CURLE_TFTP_ILLEGAL VALUE 71.
78 CURLE_TFTP_UNKNOWNID VALUE 72.
78 CURLE_REMOTE_FILE_EXISTS VALUE 73.
78 CURLE_TFTP_NOSUCHUSER VALUE 74.
78 CURLE_CONV_FAILED VALUE 75.
78 CURLE_CONV_REQD VALUE 76.
78 CURLE_SSL_CACERT_BADFILE VALUE 77.
78 CURLE_REMOTE_FILE_NOT_FOUND VALUE 78.
78 CURLE_SSH VALUE 79.
78 CURLE_SSL_SHUTDOWN_FAILED VALUE 80.
78 CURLE_AGAIN VALUE 81.
 
*> Error strings
01 LIBCURL_ERRORS.
02 CURLEVALUES.
03 FILLER PIC X(30) VALUE "CURLE_UNSUPPORTED_PROTOCOL ".
03 FILLER PIC X(30) VALUE "CURLE_FAILED_INIT ".
03 FILLER PIC X(30) VALUE "CURLE_URL_MALFORMAT ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE4 ".
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_RESOLVE_PROXY ".
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_RESOLVE_HOST ".
03 FILLER PIC X(30) VALUE "CURLE_COULDNT_CONNECT ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_SERVER_REPLY ".
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_ACCESS_DENIED ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE10 ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_PASS_REPLY ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE12 ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_PASV_REPLY ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_WEIRD_227_FORMAT ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_CANT_GET_HOST ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE16 ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_SET_TYPE ".
03 FILLER PIC X(30) VALUE "CURLE_PARTIAL_FILE ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_RETR_FILE ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE20 ".
03 FILLER PIC X(30) VALUE "CURLE_QUOTE_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_HTTP_RETURNED_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_WRITE_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE24 ".
03 FILLER PIC X(30) VALUE "CURLE_UPLOAD_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_READ_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_OUT_OF_MEMORY ".
03 FILLER PIC X(30) VALUE "CURLE_OPERATION_TIMEDOUT ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE29 ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_PORT_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_FTP_COULDNT_USE_REST ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE32 ".
03 FILLER PIC X(30) VALUE "CURLE_RANGE_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_HTTP_POST_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_CONNECT_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_BAD_DOWNLOAD_RESUME ".
03 FILLER PIC X(30) VALUE "CURLE_FILE_COULDNT_READ_FILE ".
03 FILLER PIC X(30) VALUE "CURLE_LDAP_CANNOT_BIND ".
03 FILLER PIC X(30) VALUE "CURLE_LDAP_SEARCH_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE40 ".
03 FILLER PIC X(30) VALUE "CURLE_FUNCTION_NOT_FOUND ".
03 FILLER PIC X(30) VALUE "CURLE_ABORTED_BY_CALLBACK ".
03 FILLER PIC X(30) VALUE "CURLE_BAD_FUNCTION_ARGUMENT ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE44 ".
03 FILLER PIC X(30) VALUE "CURLE_INTERFACE_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE46 ".
03 FILLER PIC X(30) VALUE "CURLE_TOO_MANY_REDIRECTS ".
03 FILLER PIC X(30) VALUE "CURLE_UNKNOWN_TELNET_OPTION ".
03 FILLER PIC X(30) VALUE "CURLE_TELNET_OPTION_SYNTAX ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE50 ".
03 FILLER PIC X(30) VALUE "CURLE_PEER_FAILED_VERIFICATION".
03 FILLER PIC X(30) VALUE "CURLE_GOT_NOTHING ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_NOTFOUND ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_SETFAILED ".
03 FILLER PIC X(30) VALUE "CURLE_SEND_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_RECV_ERROR ".
03 FILLER PIC X(30) VALUE "CURLE_OBSOLETE57 ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_CERTPROBLEM ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_CIPHER ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_CACERT ".
03 FILLER PIC X(30) VALUE "CURLE_BAD_CONTENT_ENCODING ".
03 FILLER PIC X(30) VALUE "CURLE_LDAP_INVALID_URL ".
03 FILLER PIC X(30) VALUE "CURLE_FILESIZE_EXCEEDED ".
03 FILLER PIC X(30) VALUE "CURLE_USE_SSL_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_SEND_FAIL_REWIND ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_ENGINE_INITFAILED ".
03 FILLER PIC X(30) VALUE "CURLE_LOGIN_DENIED ".
03 FILLER PIC X(30) VALUE "CURLE_TFTP_NOTFOUND ".
03 FILLER PIC X(30) VALUE "CURLE_TFTP_PERM ".
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_DISK_FULL ".
03 FILLER PIC X(30) VALUE "CURLE_TFTP_ILLEGAL ".
03 FILLER PIC X(30) VALUE "CURLE_TFTP_UNKNOWNID ".
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_FILE_EXISTS ".
03 FILLER PIC X(30) VALUE "CURLE_TFTP_NOSUCHUSER ".
03 FILLER PIC X(30) VALUE "CURLE_CONV_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_CONV_REQD ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_CACERT_BADFILE ".
03 FILLER PIC X(30) VALUE "CURLE_REMOTE_FILE_NOT_FOUND ".
03 FILLER PIC X(30) VALUE "CURLE_SSH ".
03 FILLER PIC X(30) VALUE "CURLE_SSL_SHUTDOWN_FAILED ".
03 FILLER PIC X(30) VALUE "CURLE_AGAIN ".
01 FILLER REDEFINES LIBCURL_ERRORS.
02 CURLEMSG OCCURS 81 TIMES PIC X(30).</syntaxhighlight>
 
{{out}}
<pre>prompt$ ./curl-rosetta summary
Read: http://www.rosettacode.org
Length: 000024043
 
prompt$ ./curl-rosetta display
Read: http://www.rosettacode.org
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
...</pre>
 
=={{header|ColdFusion}}==
<syntaxhighlight lang="coldfusion">
<lang coldfusion><cfhttp url="http://www.w3.org/Home.html" result="result">
<cfhttp url="http://www.rosettacode.org" result="result">
<cfoutput>#result.FileContent#</cfoutput></lang>
<cfoutput>#result.FileContent#</cfoutput>
</syntaxhighlight>
 
=={{header|Common Lisp}}==
CLISP provides an extension function to read http sources. Other implementations may do this differently.
{{works with|CLISP}}
<langsyntaxhighlight lang="lisp">(
(defun wget-clisp (url)
(ext:with-http-input (stream url)
(
ext:with-http-input(loop for line = (read-line stream urlnil nil)
( while line
loopdo for(format linet ="~a~%" (read-line stream nil nil))))
</syntaxhighlight>
while line do (format t "~a~%" line)
 
)
)
)</lang>
{{libheader|DRAKMA}}
 
First grabbing the entire body as a string, and then by pulling from a stream (as in the CLISP example).
 
<lang lisp>(
<syntaxhighlight lang="lisp">
defun wget-drakma-string (url &optional (out *standard-output*))
(defun wget-drakma-string (url &optional (out *standard-output*))
"Grab the body as a string, and write it to out."
"Grab the body as a (write-string, and write (drakma:http-requestit url)to out)."
(write-string (drakma:http-request url) out))
)
 
(
(defun wget-drakma-stream (url &optional (out *standard-output*))
"Grab the body as a stream, and write it to out."
(loop with body = (drakma:http-request url :want-stream t)
(
loop with body = (drakma:http-request url :want-stream t)
for line = (read-line body nil nil)
while line do (write-line line out)
finally (close body)))
</syntaxhighlight>
)
 
)</lang>
{{libheader|Dexador}}
 
<syntaxhighlight lang="lisp">
(format t "~a~%" (nth-value 0 (dex:get "http://www.w3.org/")))
</syntaxhighlight>
 
=={{header|Crystal}}==
<syntaxhighlight lang ="crystal">require "http/client"
require "http/client"
HTTP::Client.get("http://www.w3.org/Home.html")</lang>
 
HTTP::Client.get("http://google.com")
</syntaxhighlight>
 
=={{header|D}}==
{{libheader|phobos}}
<syntaxhighlight lang="d">
<lang D>void main() {
void main() {
import std.stdio, std.net.curl;
import std.stdio, std.net.curl;
writeln(get("http://www.w3.org/Home.html"));
writeln(get("http://google.com"));
}</lang>
}
</syntaxhighlight>
 
{{libheader|tango}}
 
<lang D>import tango.io.Console;
<syntaxhighlight lang="d">
import tango.io.Console;
import tango.net.http.HttpGet;
 
void main() {
Cout.stream.copy( (new HttpGet("http://wwwgoogle.w3.org/Home.htmlcom")).open );
}
}</lang>
</syntaxhighlight>
 
Or more operating directly on the socket:
 
<lang D>import tango.io.Console;
<syntaxhighlight lang="d">
import tango.io.Console;
import tango.net.InternetAddress;
import tango.net.device.Socket;
 
void main() {
auto site = new Socket;
site.connect (new InternetAddress("wwwgoogle.w3.orgcom",80)).write ("GET /Home.html HTTP/1.0\n\n");
 
Cout.stream.copy (site);
Cout.stream.copy (site);
}</lang>
}
</syntaxhighlight>
 
=={{header|Dart}}==
Using the stand-alone VM:
<langsyntaxhighlight lang="d">import 'dart:io';
void main(){
var url = 'http://www.w3rosettacode.org/Home.html';
var client = new HttpClient();
client.getUrl(Uri.parse(url)).then(
.then((HttpClientRequest request) => request.close())
.then((HttpClientResponse response) => response.pipe(stdout));
).then(
}</syntaxhighlight>
(HttpClientResponse response) => response.pipe(stdout)
);
}</lang>
 
=={{header|Delphi}}==
Simple example using the free Synapse TCP/IP library [http://www.ararat.cz/synapse/doku.php/download]
 
<lang Delphi>program HTTP;
<syntaxhighlight lang="delphi">
program HTTP;
 
{$APPTYPE CONSOLE}
 
{$DEFINE DEBUG}
 
uses
Classes,
httpsend; // Synapse httpsend; class
 
var
Response: TStrings;
HTTPObj: THTTPSend;
 
begin
HTTPObj := THTTPSend.Create;
try
{ Stringlist object to capture HTML returned
from URL }
Response := TStringList.Create;
try
if HTTPObj.HTTPMethod('GET','http://www.mgis.uk.com') then
Response := TStringList.Create;
trybegin
{ Load HTTP Document into Stringlist }
if HTTPObj.HTTPMethod('GET','http://www.w3.org/Home.html') then
Response.LoadFromStream(HTTPObj.Document);
begin
{ Write the response to the console window }
Response.LoadFromStream(HTTPObj.Document);
Writeln(Response.Text);
end
else
Writeln('Error retrieving data');
 
finally
Response.Free;
end;
finally
HTTPObjResponse.Free;
end;
 
Readln;
finally
end.</lang>
HTTPObj.Free;
end;
 
// Keep console window open
Readln;
 
end.
</syntaxhighlight>
 
 
Using Indy:
 
<lang Delphi>program ShowHTTP;
<syntaxhighlight lang="delphi">
program ShowHTTP;
 
{$APPTYPE CONSOLE}
 
uses IdHttp;
 
var
s: string;
lHTTP: TIdHTTP;
begin
lHTTP := TIdHTTP.Create(nil);
try
lHTTP.HandleRedirects := True;
s := lHTTP.Get('http://www.w3rosettacode.org/Home.html');
Writeln(s);
finally
lHTTP.Free;
end;
end.</lang>
</syntaxhighlight>
 
=={{header|Dragon}}==
<langsyntaxhighlight lang="dragon">select "http"
select "std"
 
http("http://www.w3.org/Home.html", ::echo)</lang>
http("http://www.rosettacode.org", ::echo)
</syntaxhighlight>
 
=={{header|E}}==
 
<lang e>when (def t := <http://www.w3.org/Home.html> <- getText()) -> {
<syntaxhighlight lang="e">
when (def t := <http://www.rosettacode.org> <- getText()) -> {
println(t)
}
}</lang>
</syntaxhighlight>
 
=={{header|EchoLisp}}==
'''file->string''' usage: the server must allow cross-domain access, or a browser add-on like cors-everywhere must be installed to bypass cross-domain checking.
<syntaxhighlight lang="scheme">
<lang scheme>;; asynchronous call back definition
;; asynchronous call back definition
(define (success name text) (writeln 'Loaded name) (writeln text))
;;
(file->string success "http://www.w3google.org/Home.htmlcom")</lang>
</syntaxhighlight>
 
=={{header|Emacs Lisp}}==
 
<code>url.el</code> can download HTTP. <code>url-retrieve-synchronously</code> returns a buffer containing headers and body. Caller kills the buffer when no longer required.
{{libheader|url.el}}
<lang Lisp>(with-current-buffer
 
(url-retrieve-synchronously "http://www.w3.org/Home.html")
<code>url-retrieve-synchronously</code> returns a buffer containing headers and body. Caller must kill the buffer when no longer needed.
(goto-char (point-min))
 
;; skip headers
<syntaxhighlight lang="lisp">(let ((buffer (url-retrieve-synchronously "http://www.rosettacode.org")))
(search-forward "\n\n" nil t)
(unwind-protect
(prin1 (buffer-substring (point) (point-max)))
(kill-buffer (with-current-buffer)) buffer
(message "%s" (buffer-substring url-http-end-of-headers (point-max))))
)</lang>
(kill-buffer buffer)))</syntaxhighlight>
 
Asynchronously (buffer doesn't need to be killed by caller):
 
<syntaxhighlight lang="lisp">(url-retrieve "http://www.rosettacode.org"
(lambda (_status)
(message "%s" (buffer-substring url-http-end-of-headers (point-max)))))</syntaxhighlight>
 
=={{header|Erlang}}==
===Synchronous===
<syntaxhighlight lang="erlang">
<lang erlang>-module(main).
-module(main).
-export([main/1]).
 
Line 827 ⟶ 1,094:
{ok, {_V, _H, Body}} -> io:fwrite("~p~n",[Body]);
{error, Res} -> io:fwrite("~p~n", [Res])
end.</lang>
</syntaxhighlight>
 
===Asynchronous===
<syntaxhighlight lang="erlang">
<lang erlang>-module(main).
-module(main).
-export([main/1]).
 
main([Url|[]]) ->
inets:start(),
Line 838 ⟶ 1,109:
_Any -> io:fwrite("Error: ~p~n",[_Any])
after 10000 -> io:fwrite("Timed out.~n",[])
end.</lang>
</syntaxhighlight>
 
Using it
<syntaxhighlight lang="erlang">
<lang erlang>|escript ./req.erl http://www.w3.org/Home.html</lang>
|escript ./req.erl http://www.rosettacode.org
</syntaxhighlight>
 
=={{header|F_Sharp|F#}}==
In F# we can just use the .NET library to do this so its the same as the [[C_sharp|C#]] example.
 
<lang fsharp>let wget (url : string) =
<syntaxhighlight lang="fsharp">
let wget (url : string) =
use c = new System.Net.WebClient()
c.DownloadString(url)
 
printfn "%s" (wget "http://www.w3.org/Home.html")</lang>
printfn "%s" (wget "http://www.rosettacode.org/")
</syntaxhighlight>
 
However unlike C#, F# can use an asynchronous workflow to avoid blocking any threads while waiting for a response from the server. To asynchronously download three url's at once...
 
<lang fsharp>open System.Net
<syntaxhighlight lang="fsharp">
open System.Net
open System.IO
 
let wgetAsync url = async {
let wgetAsync url =
let request = WebRequest.Create (url:string)
use!async response{ =let request = WebRequest.AsyncGetResponseCreate (url:string)
use! responseStreamresponse = responserequest.GetResponseStreamAsyncGetResponse()
use responseStream = response.GetResponseStream()
use reader = new StreamReader(responseStream)
return use reader.ReadToEnd = new StreamReader(responseStream)
return reader.ReadToEnd() }
}
 
let urls = ["http://www.w3.org/Home.html"]
let urls = ["http://www.rosettacode.org/"; "http://www.yahoo.com/"; "http://www.google.com/"]
let content = urls
|> List.map wgetAsync
|> Async.Parallel
|> Async.RunSynchronously</langsyntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USE: http.client
"http://www.w3rosettacode.org/Home.html" http-get nip print</lang>
</syntaxhighlight>
 
=={{header|Forth}}==
{{works with|GNU Forth|0.7.0}}
This works at the socket level, returning both the HTTP headers and page contents.
<syntaxhighlight lang ="forth">include unix/socket.fs
s"www.w3.org"include 80 open-unix/socket.fs
 
dup s\" GET /Home.html HTTP/1.0\n\n" rot write-socket
s" localhost" 80 open-socket
dup s\" GET / HTTP/1.0\n\n" rot write-socket
dup pad 8092 read-socket type
close-socket</lang>
</syntaxhighlight>
 
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">Dim As String urlfile
urlfile="start http://rosettacode.org/wiki/Main_Page"
 
Print urlfile
 
Shell(urlfile)
 
Print !"\n--- pulsa RETURN para continuar ---"
Sleep</syntaxhighlight>
 
 
=={{header|friendly interactive shell}}==
{{trans|UNIX Shell}}
<langsyntaxhighlight lang="fishshell">curl --silents --locationL http://www.w3rosettacode.org/Home.html</langsyntaxhighlight>
 
<lang fishshell>lynx -source http://www.w3.org/Home.html</lang>
<syntaxhighlight lang ="fishshell">wgetlynx --output-document=- --quietsource http://www.w3rosettacode.org/Home.html</langsyntaxhighlight>
 
<lang fishshell>lftp -c "cat http://www.w3.org/Home.html"</lang>
<syntaxhighlight lang="fishshell">wget -O - -q http://rosettacode.org/</syntaxhighlight>
 
<syntaxhighlight lang="fishshell">lftp -c "cat http://rosettacode.org/"</syntaxhighlight>
 
{{works with|BSD}}
<langsyntaxhighlight lang="fishshell">ftp -o - http://www.w3rosettacode.org/Home.html ^ /dev/null</langsyntaxhighlight>
 
=={{header|Frink}}==
Frink's <CODE>read[<I>URL</I>]</CODE> function works with any URL type supported by your Java Virtual Machine, and returns the results as a single string.
<syntaxhighlight lang="frink">
<lang frink>print[read["http://www.w3.org/Home.html"]]</lang>
print[read["http://frinklang.org/"]]
</syntaxhighlight>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
include "NSLog.incl"
 
#plist NSAppTransportSecurity @{NSAllowsArbitraryLoads:YES}
 
local fn URLSessionHandler( session as URLSessionRef, dta as CFDataRef, response as URLResponseRef, err as ErrorRef, userData as ptr )
if ( fn HTTPURLResponseStatusCode( (HTTPURLResponseRef)response ) == 200 )
NSLog( @"%@", fn StringWithData( dta, NSUTF8StringEncoding ) )
else
NSLog( @"%@", fn ErrorLocalizedDescription( err ) )
end if
NSLogScrollToTop
end fn
 
local fn URLSessionWithGetRequest( path as CFStringRef )
CFURLRef url = fn URLWithString( path )
MutableURLRequestRef urlRequest = fn MutableURLRequestWithURL( url )
MutableURLRequestSetHTTPMethod( urlRequest, @"HTTP" )
URLSessionRef session = fn URLSessionSharedSession
URLSessionDataTaskRef task = fn URLSessionDataTaskWithRequestCompletionHandler( session, urlRequest, @fn URLSessionHandler, NULL )
URLSessionTaskResume( task )
end fn
 
fn URLSessionWithGetRequest( @"http://rosettacode.org" )
 
HandleEvents
</syntaxhighlight>
 
=={{header|Gastona}}==
<langsyntaxhighlight lang="gastona">#listix#
 
<main>
LOOP, TEXT FILE, http://www.rosettacode.org
, BODY, @<value>
</syntaxhighlight>
</lang>
 
=={{header|GML}}==
Line 902 ⟶ 1,237:
 
'''Any Event'''
<langsyntaxhighlight lang="gml">get = http_get("http://www.rosettacode.org/");</langsyntaxhighlight>
 
'''HTTP Event'''
<langsyntaxhighlight lang="gml">if (ds_map_find_value(async_load,"id") == get)
{
show_message_async(ds_map_find_value(async_load,"result"));
}</langsyntaxhighlight>
 
=={{header|Go}}==
<syntaxhighlight lang="go">
<lang go>
package main
 
import (
"io"
"log"
"net/http"
"os"
)
 
func main() {
respr, _err := http.Get("http://www.w3rosettacode.org/robots.txt")
if err != nil {
io.Copy(os.Stdout, resp.Body)
log.Fatalln(err)
}
io.Copy(os.Stdout, r.Body)
}
</syntaxhighlight>
</lang>
 
Output:
<pre>
User-agent: *
Allow: /mw/images/
Allow: /mw/skins/
Allow: /mw/title.png
Disallow: /w/
Disallow: /mw/
Disallow: /wiki/Special:
</pre>
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">
new URL("http://www.rosettacode.org").eachLine { println it }
</syntaxhighlight>
</lang>
 
=={{header|GUISS}}==
Line 933 ⟶ 1,285:
It would be more appropriate to paste to notepad:
 
<langsyntaxhighlight lang="guiss">Start,Programs,Applications,Mozilla Firefox,Inputbox:address bar>www.rosettacode.org,Button:Go,
Click:Area:browser window,Type:[Control A],[Control C],Start,Programs,Accessories,Notepad,
Menu:Edit,Paste</langsyntaxhighlight>
 
=={{header|Halon}}==
<langsyntaxhighlight lang="halon">echo http("http://www.rosettacode.org");</langsyntaxhighlight>
 
=={{header|Haskell}}==
Using {{libheader|HTTP}} from [http://hackage.haskell.org/packages/hackage.html HackageDB]
 
<langsyntaxhighlight lang="haskell">
import Network.Browser
import Network.HTTP
Line 954 ⟶ 1,306:
request $ getRequest "http://www.rosettacode.org/"
putStrLn $ rspBody $ snd rsp
</syntaxhighlight>
</lang>
 
== Icon and Unicon ==
==={{header|Icon}}===
<langsyntaxhighlight lang="icon">
link cfunc
procedure main(arglist)
Line 978 ⟶ 1,330:
while write(read(f))
end
</syntaxhighlight>
</lang>
 
Using it
<langsyntaxhighlight lang="icon">
|icon req.icn http://www.rosettacode.org
</syntaxhighlight>
</lang>
 
==={{header|Unicon}}===
Unicon provides improved socket and messaging support without the need for the external function ''cfunc'':
<langsyntaxhighlight lang="unicon">
procedure main(arglist)
m := open(arglist[1],"m")
while write(read(m))
end
</syntaxhighlight>
</lang>
 
=={{header|J}}==
Using <tt>gethttp</tt> from [[Web Scraping#J|Web Scraping]]
 
<langsyntaxhighlight lang="j">require'web/gethttp'
gethttp 'http://www.rosettacode.org'
</syntaxhighlight>
</lang>
 
=={{header|Java}}==
The ''URL'' class offers an ''openStream'' method which will make a connection and return an ''InputStream''.
<lang java5>import java.util.Scanner;
<syntaxhighlight lang="java">
import java.net.URL;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
</syntaxhighlight>
<syntaxhighlight lang="java">
void printContent(String address) throws URISyntaxException, IOException {
URL url = new URI(address).toURL();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
String line;
while ((line = reader.readLine()) != null)
System.out.println(line);
}
}
</syntaxhighlight>
<br />
Using the standard [http://openjdk.java.net/groups/net/httpclient/ Java 11 HTTP Client]
 
<syntaxhighlight lang="java">import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.Charset;
 
public class Main {
public static void main(String[] args) throws Exception {
Scannervar screquest = new ScannerHttpRequest.newBuilder(new URLURI.create("httphttps://www.rosettacode.org").openStream());
while (sc .hasNextGET())
System .out.println(sc.nextLinebuild());
 
HttpClient.newHttpClient()
.sendAsync(request, HttpResponse.BodyHandlers.ofString(Charset.defaultCharset()))
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}</syntaxhighlight>
}
</lang>
 
{{libheader|Apache Commons IO}}
 
<langsyntaxhighlight lang="java5">
import org.apache.commons.io.IOUtils;
import java.net.URL;
Line 1,024 ⟶ 1,406:
IOUtils.copy(new URL("http://rosettacode.org").openStream(),System.out);
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
 
===Browser===
Using fetch API and async/await:
<lang JavaScript>fetch("http://www.w3.org").then(function (response) {
<syntaxhighlight lang="javascript">
return response.text();
const response = await fetch('http://rosettacode.org');
}).then(function (body) {
const text = await response.text();
return body;
console.log(text);
});</lang>
</syntaxhighlight>
 
Using fetch API:
<syntaxhighlight lang="javascript">
fetch('http://rosettacode.org').then(function (response) {
return response.text();
}).then(function (text) {
console.log(text);
});
</syntaxhighlight>
 
<syntaxhighlight lang="javascript">var req = new XMLHttpRequest();
req.onload = function() {
console.log(this.responseText);
};
 
req.open('get', 'http://rosettacode.org', true);
req.send()</syntaxhighlight>
 
As a repeatable function:
 
<syntaxhighlight lang="javascript">/**
* @name _http
* @description Generic API Client using XMLHttpRequest
* @param {string} url The URI/URL to connect to
* @param {string} method The HTTP method to invoke- GET, POST, etc
* @param {function} callback Once the HTTP request has completed, responseText is passed into this function for execution
* @param {object} params Query Parameters in a JavaScript Object (Optional)
*
*/
function _http(url, method, callback, params) {
var xhr,
reqUrl;
 
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function xhrProc() {
if (xhr.readyState == 4 && xhr.status == 200) {
callback(xhr.responseText);
}
};
 
 
/** If Query Parameters are present, handle them... */
if (typeof params === 'undefined') {
reqUrl = url;
} else {
switch (method) {
case 'GET':
reqUrl = url + procQueryParams(params);
break;
case 'POST':
reqUrl = url;
break;
default:
}
}
 
 
/** Send the HTTP Request */
if (reqUrl) {
xhr.open(method, reqUrl, true);
xhr.setRequestHeader("Accept", "application/json");
 
if (method === 'POST') {
xhr.send(params);
} else {
xhr.send();
}
}
 
 
/**
* @name procQueryParams
* @description Return function that converts Query Parameters from a JavaScript Object to a proper URL encoded string
* @param {object} params Query Parameters in a JavaScript Object
*
*/
function procQueryParams(params) {
return "?" + Object
.keys(params)
.map(function (key) {
return key + "=" + encodeURIComponent(params[key])
})
.join("&")
}
}</syntaxhighlight>
 
Using jQuery:
 
<syntaxhighlight lang="javascript">$.get('http://rosettacode.org', function(data) {
console.log(data);
};</syntaxhighlight>
 
===Node.js===
 
<lang javascript>require("http").get("http://www.w3.org", function (resp) {
With Node.js, using only the included http module.
let body = "";
 
resp.on("body", function (chunk) {
<syntaxhighlight lang="javascript">const http = require('http');
body += chunk;
});
http.get('http://rosettacode.org', (resp) => {
resp.on("end", function () {
 
console.debug(body);
let data })= '';
}).on("error", function (err) {
// A chunk of data has been recieved.
console.error(err.message);
resp.on('data', (chunk) => {
});</lang>
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log("Data:", data);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});</syntaxhighlight>
 
=={{header|Jsish}}==
Based on Jsi_Wget that ships with Jsish.
 
<lang javascript>#!/usr/bin/env jsish
<syntaxhighlight lang="javascript">#!/usr/bin/env jsish
function httpGet(fileargs:array|string, conf:object=void) {
// Web client for downloading files from url
var options = { // Web client for downloading files from url
headers : [], // Header fields to send.
nowait : false, // Just return object: caller will call update.
headers: [],
//onDone Just return object: callernull, // willCallback callwhen updatedone.
wsdebug : 0 // WebSockets debug level.
nowait: false,
// Callback when done.
onDone: null,
// WebSockets debug level.
wsdebug: 0
};
var self = {
address : '',
done : false,
path : '',
port : -1,
post : '', // Post file upload (UNIMPL).
postscheme : 'http', // Url scheme
//protocol Url scheme : 'get',
schemeurl : 'http'null,
protocolresponse : 'get',
url: null,
response: ''
};
 
parseOpts(self, options, conf);
if (self.port === -1)
self.port = 80;
function WsRecv(ws:userobj, id:number, str:string) {
LogDebug("LEN: "+str.length);
Line 1,083 ⟶ 1,568:
self.response += str;
}
function WsClose(ws:userobj|null, id:number) {
LogDebug("CLOSE");
Line 1,089 ⟶ 1,575:
self.onDone(id);
}
function main() {
if (self.Debug)
Line 1,113 ⟶ 1,600:
if (self.post.length)
self.protocol = 'post';
var wsopts = {
client: true,
onRecv: WsRecv,
onClose: WsClose,
debug: self.wsdebug,
rootdir: self.path,
port: self.port,
address: self.address,
protocol: self.protocol,
clientHost: self.address
};
if (self.post.length)
Line 1,148 ⟶ 1,636:
return self.response;
}
 
return main();
}
 
provide(httpGet, "0.60");
 
if (isMain())
runModule(httpGet);</langsyntaxhighlight>
 
{{out}}
<pre>prompt$ jsish
Line 1,172 ⟶ 1,664:
 
=={{header|Julia}}==
<langsyntaxhighlight Julialang="julia">readurl(url) = open(readlines, download(url))
 
readurl("http://rosettacode.org/index.html")</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.2
 
import java.net.URL
Line 1,189 ⟶ 1,681:
while (sc.hasNextLine()) println(sc.nextLine())
sc.close()
}</langsyntaxhighlight>
 
=={{header|Lasso}}==
incude_url is a wrapper for Lasso's curl datatype, however it can be achieved in several ways.
<langsyntaxhighlight Lassolang="lasso">// using include_url wrapper:
include_url('http://rosettacode.org/index.html')
 
Line 1,202 ⟶ 1,694:
local(x = curl('http://rosettacode.org/index'))
local(y = #x->result)
#y->asString</langsyntaxhighlight>
 
=={{header|LFE}}==
 
===Synchronous===
<langsyntaxhighlight lang="lisp">(: inets start)
(case (: httpc request '"http://lfe.github.io")
(
((tuple 'ok result)
case (: httpc request '"http://lfe.github.io") (
(: io format '"Result: ~p" (tuple 'oklist result)))
((tuple 'error reason)
(: io format '"Result: ~p" (list result))
(: io format '"Error: ~p~n" (list reason))))
) (
</syntaxhighlight>
(tuple 'error reason)
 
(: io format '"Error: ~p~n" (list reason))
)
)</lang>
===Asynchronous===
<langsyntaxhighlight lang="lisp">(: inets start)
(let* ((method 'get)
(
(url '"http://lfe.github.io")
let* (
(methodheaders 'get())
(request-data (tuple url '"http://lfe.github.io"headers))
(headershttp-options ())
(request-dataoptions (list (tuple url'sync headers'false))))
(: httpc request method request-data (http-options ()request-options)
(receive
(request-options (list (tuple 'sync 'false)))
((tuple 'http (tuple request-id (tuple 'error reason)))
)
(: io format '"Error: ~p~n" (list reason)))
(: httpc request method request-data http-options request-options)
((tuple 'http (tuple request-id result))
(
(: io format '"Result: ~p~n" (list result))))))
receive (
</syntaxhighlight>
(tuple 'http (tuple request-id (tuple 'error reason)))
(: io format '"Error: ~p~n" (list reason))
)
(
(tuple 'http (tuple request-id result))
(: io format '"Result: ~p~n" (list result))
)
)
))</lang>
 
=={{header|Liberty BASIC}}==
Uses a dll call and a timer to allow time to receive the file.
<syntaxhighlight lang="lb">
<lang lb>
result = DownloadToFile( "http://rosettacode.org/wiki/Main_Page", "in.html")
timer 2000, [on]
Line 1,263 ⟶ 1,746:
close #url
end function
</syntaxhighlight>
</lang>
 
=={{header|Lingo}}==
Line 1,269 ⟶ 1,752:
 
Parent script "SimpleHttpGet":
<langsyntaxhighlight lang="lingo">property _netID
property _cbHandler
property _cbTarget
Line 1,298 ⟶ 1,781:
call(me._cbHandler, me._cbTarget, res, err)
end if
end</langsyntaxhighlight>
 
In some movie script:
<langsyntaxhighlight lang="lingo">----------------------------------------
--
----------------------------------------
Line 1,317 ⟶ 1,800:
put "Network Error:" && err
end if
end</langsyntaxhighlight>
 
Executed in the "Message Window" (=Director's interactive Lingo console):
<langsyntaxhighlight lang="lingo">getAdobeHomePage()
-- "<!doctype html>
...</langsyntaxhighlight>
 
=={{header|LiveCode}}==
Without a callback handler the get URL method will block until complete
<langsyntaxhighlight LiveCodelang="livecode">put true into libURLFollowHttpRedirects
get URL "http://httpbin.org/html"
put it</langsyntaxhighlight>
Non-blocking version
<langsyntaxhighlight LiveCodelang="livecode">on myUrlDownloadFinished
answer "Download Complete" with "Okay"
end myUrlDownloadFinished
Line 1,336 ⟶ 1,819:
command getWebResource
load URL "http://httpbin.org/html" with message "myUrlDownloadFinished"
end getWebResource</langsyntaxhighlight>
 
=={{header|LSL}}==
To test it yourself; rez a box on the ground, and add the following as a New Script.
<langsyntaxhighlight LSLlang="lsl">string sURL = "http://www.RosettaCode.Org";
key kHttpRequestId;
default {
state_entry() {
kHttpRequestId = llHTTPRequest(sURL, [], "");
}
}
http_response(key kRequestId, integer iStatus, list lMetaData, string sBody) {
if (kRequestId == kHttpRequestId) {
llOwnerSay("Status="+(string)iStatus);
integer x = 0;
for (x=0 ; x<llGetListLength(lMetaData) ; x++) {
llOwnerSay("llList2String(lMetaData, "+(string)x+") = "+llList2String(lMetaData, x));
}
}
list lBody = llParseString2List(sBody, ["\n"], []);
for (x=0 ; x<llGetListLength(lBody) ; x++) {
llOwnerSay("llList2String(lBody, "+(string)x+") = "+llList2String(lBody, x));
}
}
}
}
}
}
}
}</lang>
</syntaxhighlight>
Output:
<pre>Status=200
llList2String(lMetaData, 0)=0
llList2String(lMetaData, 1)=2048
llList2String(lBody, 0)=<!DOCTYPE html>
llList2String(lBody, 1)=<html lang="en" dir="ltr" class="client-nojs">
llList2String(lBody, 2)=<head>
llList2String(lBody, 3)=<title>Rosetta Code</title>
llList2String(lBody, 4)=<meta charset="UTF-8" />
llList2String(lBody, 5)=<meta name="generator" content="MediaWiki 1.18.0" />
llList2String(lBody, 6)=<link rel="shortcut icon" href="/favicon.ico" />
llList2String(lBody, 7)=<link rel="search" type="application/opensearchdescription+xml" href="/mw/opensearch_desc.php" title="Rosetta Code (en)" />
llList2String(lBody, 8)=<link rel="EditURI" type="application/rsd+xml" href="http://rosettacode.org/mw/api.php?action=rsd" />
llList2String(lBody, 9)=<link rel="copyright" href="http://www.gnu.org/licenses/fdl-1.2.html" />
llList2String(lBody, 10)=<link rel="alternate" type="application/atom+xml" title="Rosetta Code Atom feed" href="/mw/index.php?title=Special:RecentChanges&amp;feed=atom" />
llList2String(lBody, 11)=<link rel="stylesheet" href="/mw/load.php?debug=false&amp;lang=en&amp;modules=mediawiki.legacy.commonPrint%2Cshared%7Cskins.vector&amp;only=styles&amp;skin=vector&amp;*" />
llList2String(lBody, 12)=<meta name="ResourceLoaderDynamicStyles" content="" />
llList2String(lBody, 13)=<link rel="stylesheet" href="/mw/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=styles&amp;skin=vector&amp;*" />
llList2String(lBody, 14)=<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}a.new,#quickbar a.new{color:#ba0000}
... ... ... ... ... ... ... ... ... ... ... ... ... ...
</pre>
 
=={{header|Lua}}==
{{libheader|LuaSocket}}
<syntaxhighlight lang="lua">
<lang Lua>
local http = require("socket.http")
local url = require("socket.url")
local page = http.request('http://www.google.com/m/search?q=' .. url.escape("lua"))
print(page)
</syntaxhighlight>
</lang>
 
=={{header|M2000 Interpreter}}==
Line 1,376 ⟶ 1,881:
Using With statement we can make objects properties like ReadyState as variables
(some of them as read only)
 
<lang M2000 Interpreter>Module CheckIt {
<syntaxhighlight lang="m2000 interpreter">
Declare xml "Microsoft.XMLHTTP"
Module CheckIt {
const testUrl$ = "http://www.rosettacode.org"
With Declare xml, "readyStateMicrosoft.XMLHTTP" as ReadyState
Method xml "Open", "Get",const testUrl$, True= "http://www.rosettacode.org"
Method With xml, "sendreadyState" as ReadyState
Method xml "Open", "Get", testUrl$, True ' True means Async
k = 0
Method xml "send"
Thread {
\\ We k++set a thread to count time
} as TimeOut interval 100k=0
Task.Main 100 Thread {
Print ReadyState k++
} Ifas ReadyState=4TimeOut theninterval 100
\\ In main thread we can check ReadyState and Mouse button
exit
Task.Main 100 if k > 20 then{
exitPrint ReadyState
if mouse If ReadyState=4 then exit
if k>20 then exit ' 20*100= 2 sec
if mouse then exit ' exit if mouse click
}
if ReadyState = 4 then {}
\\ So Withnow we xml,can "responseText" AS AA$read
if ReadyState=4 Documentthen BB$=AA${
With xml, "responseText" AS AA$
Report BB$
\\ break AA$ to lines
}
Document BB$=AA$
Declare xml Nothing
\\ using line breaks as CRLF
Report BB$
}
Declare xml Nothing
}
CheckIt</lang>
</syntaxhighlight>
 
=={{header|Maple}}==
In Maple 18 or later:
<syntaxhighlight lang="maple">
<lang Maple>
content := URL:-Get( "http://www.google.com/" );
</syntaxhighlight>
</lang>
 
In Maple 17 or earlier:
<syntaxhighlight lang="maple">
<lang Maple>
content := HTTP:-Get( "http://www.google.com/" );
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">
<lang Mathematica>
Print[Import["http://www.google.com/webhp?complete=1&hl=en", "Source"]]
</syntaxhighlight>
</lang>
 
=={{header|MATLAB}} / {{header|Octave}}==
[http://www.mathworks.com/help/matlab/ref/urlread.html urlread] is MATLAB's function for making URL requests.
The documentation for Octave is available here [http://octave.sourceforge.net/octave/function/urlread.html urlread].
 
In this example we initiate an HTTP request for a single random number from [http://www.random.org random.org]:
<syntaxhighlight lang="matlab">
<lang MATLAB>>> random = urlread('http://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new')
>> random = urlread('http://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new')
 
random =
 
61</lang>
</syntaxhighlight>
 
It is possible to make more complicated requests, specifically "GET" and "POST," which is explained in the [http://www.mathworks.com/help/matlab/ref/urlread.html documentation].
 
=={{header|Microsoft Small Basic}}==
<syntaxhighlight lang="smallbasic">TextWindow.WriteLine(Network.GetWebPageContents("http://rosettacode.org"))</syntaxhighlight>
 
=={{header|MIRC Scripting Language}}==
Line 1,435 ⟶ 1,952:
 
=={{header|Nanoquery}}==
<langsyntaxhighlight lang="nanoquery">import http
import url
 
Line 1,443 ⟶ 1,960:
 
response = client.get(url.getFile())
println response.get("body")</langsyntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">using System;
using System.Console;
using System.Net;
Line 1,462 ⟶ 1,979:
myStream.Close()
}
}</langsyntaxhighlight>
 
=={{header|NetRexx}}==
Line 1,468 ⟶ 1,985:
An implementation of the [[#Java|Java]] version shown above; demonstrating NetRexx's ability to exploit the rich Java SDK.
 
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols binary
 
Line 1,484 ⟶ 2,001:
end
 
return</langsyntaxhighlight>
 
=={{header|NewLisp}}==
<syntaxhighlight lang="newlisp">
<lang NewLisp>
(get-url "http://www.rosettacode.org")
</syntaxhighlight>
</lang>
 
=={{header|Nim}}==
Compile example with command <code>nim c -d:ssl httpClient.nim</code>.
<lang nim>import httpclient
<syntaxhighlight lang="nim">import httpclient
 
var client = newHttpClient()
echo client.getContent "http://rosettacode.org"</langsyntaxhighlight>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">use HTTP;
use Collection;
 
Line 1,508 ⟶ 2,026:
};
}
}</langsyntaxhighlight>
 
=={{header|Objective-C}}==
<langsyntaxhighlight lang="objc">#import <Foundation/Foundation.h>
 
int main (int argc, const char * argv[]) {
Line 1,527 ⟶ 2,045:
}
return 0;
}</langsyntaxhighlight>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">
let () =
let url = "http://www.rosettacode.org" in
Line 1,536 ⟶ 2,054:
print_endline page_content;
;;
</syntaxhighlight>
</lang>
 
The source code of the function ''make_request'' is [[Web_Scraping/OCaml|here]].
 
=={{header|Ol}}==
{{libheader|libcurl}}
 
<syntaxhighlight lang="scheme">
(import (lib curl))
 
(define curl (make-curl))
(curl 'url "http://rosettacode.org/")
(curl 'perform)
</syntaxhighlight>
 
=={{header|ooRexx}}==
Got this from a friend. Needs bsf4oorexx from sourceforge.
<br>Note that rosettacode.org (as used by java and NetRexx) does not permit this access!
<langsyntaxhighlight lang="oorexx">url=.bsf~new("java.net.URL","http://teletext.orf.at")
sc =.bsf~new("java.util.Scanner",url~openStream)
loop while sc~hasNext
say sc~nextLine
End
::requires BSF.CLS -- get Java camouflaging support</langsyntaxhighlight>
{{out}}
massaged to avoid problems.
Line 1,557 ⟶ 2,086:
=={{header|Oz}}==
When creating a file object, it is possible to specify an URL instead of a filename:
<syntaxhighlight lang="oz">
<lang oz>
declare
fun {GetPage Url}
Line 1,568 ⟶ 2,097:
in
{System.showInfo {GetPage "http://www.rosettacode.org"}}
</syntaxhighlight>
</lang>
 
{{libheader|OzHttpClient}}
 
If you need more fine-grained control of the request, you could use a custom library:
<syntaxhighlight lang="oz">
<lang oz>
declare
[HTTPClient] = {Module.link ['x-ozlib://mesaros/net/HTTPClient.ozf']}
Line 1,591 ⟶ 2,120:
in
{System.showInfo {GetPage "http://www.rosettacode.org"}}
</syntaxhighlight>
</lang>
 
=={{header|Pascal}}==
{{works with|Free Pascal}}
Using [http://wiki.freepascal.org/fphttpclient fphttpclient]
<langsyntaxhighlight lang="pascal">{$mode objfpc}{$H+}
uses fphttpclient;
 
var
s: string;
hc: tfphttpclient;
 
begin
hc := tfphttpclient.create(nil);
try
s := hc.get('http://www.example.com')
finally
hc.free
end;
writeln(s)
end.</langsyntaxhighlight>
 
 
{{works with|Free Pascal}} {{libheader|CThreads}} {{libheader|Classes}} {{libheader|httpsend}}
<langsyntaxhighlight lang="pascal">program http;
 
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
 
{$DEFINE DEBUG}
 
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$IFDEF UseCThreads}
{$ENDIF}{$ENDIF}
cthreads,
Classes, httpsend; // Synapse httpsend class
{$ENDIF}
{$ENDIF}
Classes,
// Synapse httpsend class
httpsend;
{$R *.res}
 
var
Response: TStrings;
HTTPObj: THTTPSend;
 
begin
HTTPObj := THTTPSend.Create;
try
{ Stringlist object to capture HTML returned
from URL }
Response := TStringList.Create;
try
if HTTPObj.HTTPMethod('GET','http://wiki.lazarus.freepascal.org/Synapse') then
Response := TStringList.Create;
trybegin
{ Load HTTP Document into Stringlist }
if HTTPObj.HTTPMethod('GET','http://wiki.lazarus.freepascal.org/Synapse') then
Response.LoadFromStream(HTTPObj.Document);
begin
{ Write the response to the console window }
Response.LoadFromStream(HTTPObj.Document);
Writeln(Response.Text);
end
else
Writeln('Error retrieving data');
 
finally
Response.Free;
end;
finally
HTTPObjResponse.Free;
end;
 
Readln;
finally
end.</lang>
HTTPObj.Free;
end;
 
// Keep console window open
Readln;
 
end.</syntaxhighlight>
 
=={{header|Peloton}}==
English dialect, short form:
<langsyntaxhighlight lang="sgml">
<@ SAYURLLIT>http://rosettacode.org/wiki/Main_Page</@>
</syntaxhighlight>
</lang>
 
English dialect, padded variable-length form:
<langsyntaxhighlight lang="sgml">
<# SAY URLSOURCE LITERAL>http://rosettacode.org/wiki/Main_Page</#>
</syntaxhighlight>
</lang>
 
=={{header|Perl}}==
 
<lang perl>use HTTP::Tiny;
===Core example===
my $response = HTTP::Tiny -> new -> get("http://www.w3.org/Home.html");
{{libheader|HTTP/Tiny}}
print $response -> {content};</lang>
{{works with|Perl|5.14}}
{{works with|Perl/HTTP/Tiny}}
 
This sample is nearly identical to the LWP sample except that it uses HTTP::Tiny which was added to the core libraries in [[Perl/5.14]].
 
<syntaxhighlight lang="perl">use strict; use warnings;
require 5.014; # check HTTP::Tiny part of core
use HTTP::Tiny;
 
print( HTTP::Tiny->new()->get( 'http://rosettacode.org')->{content} );</syntaxhighlight>
 
===Library examples===
 
===={{libheader|LWP}}====
{{works with|Perl/LWP}}
 
Classic LWP sample.
 
<syntaxhighlight lang="perl">use LWP::Simple qw/get $ua/;
$ua->agent(undef) ; # cloudflare blocks default LWP agent
print( get("http://www.rosettacode.org") );</syntaxhighlight>
 
or with more error-checking
 
<syntaxhighlight lang="perl">use strict;
use LWP::UserAgent;
 
my $url = 'http://www.rosettacode.org';
my $response = LWP::UserAgent->new->get( $url );
 
$response->is_success or die "Failed to GET '$url': ", $response->status_line;
 
print $response->as_string</syntaxhighlight>
 
=={{header|Phix}}==
{{libheader|Phix/libcurl}}
Note that curl_easy_get_file() is better suited to multi-megabyte downloads than curl_easy_perform_ex().
<!--<syntaxhighlight lang="phix">(notonline)-->
<lang Phix>include builtins\libcurl.e
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins<span style="color: #0000FF;">\<span style="color: #000000;">libcurl<span style="color: #0000FF;">.<span style="color: #000000;">e</span>
curl_global_init()
<span style="color: #7060A8;">curl_global_init<span style="color: #0000FF;">(<span style="color: #0000FF;">)</span>
atom curl = curl_easy_init()
<span style="color: #004080;">atom</span> <span style="color: #000000;">curl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_easy_init<span style="color: #0000FF;">(<span style="color: #0000FF;">)</span>
curl_easy_setopt(curl, CURLOPT_URL, "http://rosettacode.org/robots.txt")
<span style="color: #7060A8;">curl_easy_setopt<span style="color: #0000FF;">(<span style="color: #000000;">curl<span style="color: #0000FF;">,</span> <span style="color: #000000;">CURLOPT_URL<span style="color: #0000FF;">,</span> <span style="color: #008000;">"http://rosettacode.org/robots.txt"<span style="color: #0000FF;">)</span>
object res = curl_easy_perform_ex(curl)
<span style="color: #004080;">object</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">curl_easy_perform_ex<span style="color: #0000FF;">(<span style="color: #000000;">curl<span style="color: #0000FF;">)</span>
curl_easy_cleanup(curl)
<span style="color: #7060A8;">curl_easy_cleanup<span style="color: #0000FF;">(<span style="color: #000000;">curl<span style="color: #0000FF;">)</span>
curl_global_cleanup()
<span style="color: #7060A8;">curl_global_cleanup<span style="color: #0000FF;">(<span style="color: #0000FF;">)</span>
puts(1,res)</lang>
<span style="color: #7060A8;">puts<span style="color: #0000FF;">(<span style="color: #000000;">1<span style="color: #0000FF;">,<span style="color: #000000;">res<span style="color: #0000FF;">)
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 1,690 ⟶ 2,268:
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">
readfile("http://www.rosettacode.org");
</syntaxhighlight>
</lang>
 
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">
<lang PicoLisp>
(load "@lib/http.l")
 
(client "rosettacode.org" 80 NIL # Connect to rosettacode
(out NIL (echo)) ) # Echo to standard output
</syntaxhighlight>
</lang>
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">
write("%s",Protocols.HTTP.get_url_data("http://www.rosettacode.org"));
</syntaxhighlight>
</lang>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">
Invoke-WebRequest 'http://www.rosettacode.org'
</syntaxhighlight>
 
<syntaxhighlight lang="powershell">
$wc = New-Object Net.WebClient
$wc.DownloadString('http://www.rosettacode.org')
</syntaxhighlight>
</lang>
 
=={{header|Prolog}}==
Works with SWI-Prolog and library http/http_open. (Extract from the doc).
 
<syntaxhighlight lang="prolog">
:- use_module(library( http/http_open )).
 
=={{header|SWI-Prolog}}==
<lang Prolog>:- use_module(library(http/http_open)).
http :-
http_open('http://www.w3rosettacode.org/Home.html', In, []),
copy_stream_data(In, user_output),
close(In).</lang>
</syntaxhighlight>
 
=={{header|PureBasic}}==
<syntaxhighlight lang="purebasic">
<lang PureBasic>
InitNetwork()
OpenConsole()
Line 1,739 ⟶ 2,326:
DeleteFile(filename$)
EndIf
</syntaxhighlight>
</lang>
 
Another solution using general networking commands
<syntaxhighlight lang="purebasic">
<lang PureBasic>
InitNetwork()
OpenConsole()
Line 1,757 ⟶ 2,344:
; next line only to prevent console from closing on Windows
Input()
</syntaxhighlight>
</lang>
 
Of course you could use wget too.
 
=={{header|Python}}==
 
<lang python>import http
;Python 3:
connection = http.client.HTTPConnection("www.w3.org")
Using the [http://docs.python.org/py3k/library/urllib.request.html urllib.request] module.
connection.request("GET", "/")
<syntaxhighlight lang="python">
print(connection.getresponse().read())</lang>
import urllib.request
print(urllib.request.urlopen("http://rosettacode.org").read())
</syntaxhighlight>
 
Using a more low-level [https://docs.python.org/3/library/http.client.html http.client] library.
<syntaxhighlight lang="python">
from http.client import HTTPConnection
conn = HTTPConnection("example.com")
# If you need to use set_tunnel, do so here.
conn.request("GET", "/")
# Alternatively, you can use connect(), followed by the putrequest, putheader and endheaders functions.
result = conn.getresponse()
r1 = result.read() # This retrieves the entire contents.
</syntaxhighlight>
 
;Python 2:
Using the [http://docs.python.org/library/urllib.html urllib] library.
<syntaxhighlight lang="python">
import urllib
print urllib.urlopen("http://rosettacode.org").read()
</syntaxhighlight>
 
Using the [http://docs.python.org/library/urllib2.html urllib2] library.
<syntaxhighlight lang="python">
import urllib2
print urllib2.urlopen("http://rosettacode.org").read()
</syntaxhighlight>
 
 
{{libheader|Requests}}
{{works with|Python|2.7, 3.4–3.7}}
<syntaxhighlight lang="python">
import requests
print(requests.get("http://rosettacode.org").text)
</syntaxhighlight>
 
=={{header|R}}==
Line 1,773 ⟶ 2,395:
First, retrieve the webpage.
 
<syntaxhighlight lang="r">
<lang R>
library(RCurl)
webpage <- getURL("http://rosettacode.org")
Line 1,784 ⟶ 2,406:
.opts=list(proxy="123.123.123.123", proxyusername="domain\\username", proxypassword="mypassword", proxyport=8080))
#Don't forget that backslashes in your username or password need to be escaped!
</syntaxhighlight>
</lang>
 
Now parse the html code into a tree and print the html.
 
<syntaxhighlight lang="r">
<lang R>
library(XML)
pagetree <- htmlTreeParse(webpage )
pagetree$children$html
</syntaxhighlight>
</lang>
 
=={{header|Racket}}==
<langsyntaxhighlight Racket>#lang ="racket">
#lang racket
(require net/url)
(copy-port (get-pure-port (string->url "http://www.rosettacode.org")
(
#:redirections 100)
copy-port (
get (current-pureoutput-port ())
</syntaxhighlight>
string->url "http://www.rosettacode.org"
)
#:redirections 100
)
(current-output-port)
)</lang>
 
=={{header|Raku}}==
Line 1,812 ⟶ 2,430:
Using LWP::Simple from [https://modules.raku.org/search/?q=LWP%3A%3ASimple the Raku ecosystem].
 
<syntaxhighlight lang="raku" perl6line>use v6LWP::Simple;
 
use LWP::Simple;
 
print LWP::Simple.get("http://www.rosettacode.org");
</syntaxhighlight>
</lang>
 
or, without LWP::Simple:
 
<syntaxhighlight lang="raku" line>my $socket = IO::Socket::INET.new(host => "www.rosettacode.org",
<lang perl6>use v6;
 
my $socket = IO::Socket::INET.new(host => "www.rosettacode.org",
port => 80,);
$socket.print("GET / HTTP/1.0\r\n\r\n");
print $socket.recv();
$socket.close;
</syntaxhighlight>
</lang>
 
=={{header|REALbasic}}==
REALBasic provides an HTTPSocket class for handling HTTP connections. The 'Get' method of the HTTPSocket is overloaded and can download data to a file or return data as a string, in both cases a timeout argument can be passed.
<syntaxhighlight lang="realbasic">
<lang REALbasic>
Dim sock As New HTTPSocket
Print(sock.Get("http://www.rosettacode.org", 10)) //set the timeout period to 10 seconds.
</syntaxhighlight>
</lang>
 
=={{header|REBOL}}==
<syntaxhighlight lang="rebol">
<lang REBOL>
print read http://rosettacode.org
</syntaxhighlight>
</lang>
 
=={{header|REXX}}==
Line 1,846 ⟶ 2,460:
This script takes an URL as an argument and displays the content on the terminal. It uses the external program `curl` to perform both the acquisition of the data and the display.
 
<langsyntaxhighlight Rexxlang="rexx">/* ft=rexx */
/* GET2.RX - Display contents of an URL on the terminal. */
/* Usage: rexx get.rx http://rosettacode.org */
parse arg url .
'curl' url</langsyntaxhighlight>
 
A simple change to the script will redirect the output to an internal variable for internal processing. (Our "internal processing" in this case is to display it.)
 
<langsyntaxhighlight Rexxlang="rexx">/* ft=rexx */
/* GET2.RX - Display contents of an URL on the terminal. */
/* Usage: rexx get2.rx http://rosettacode.org */
Line 1,861 ⟶ 2,475:
do i = 1 to stuff.0
say stuff.i
end</langsyntaxhighlight>
 
Another simple change redirects the output to another external program like a shell pipe.
 
<langsyntaxhighlight Rexxlang="rexx">/* ft=rexx */
/* GET3.RX - Display contents of an URL on the terminal. */
/* Usage: rexx get3.rx http://rosettacode.org */
parse arg url .
address system 'curl' url with output fifo ''
address system 'more' with input fifo ''</langsyntaxhighlight>
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
See download("http://rosettacode.org")
</syntaxhighlight>
</lang>
 
=={{header|RLaB}}==
Line 1,902 ⟶ 2,516:
Yahoo [http://ichart.finance.yahoo.com/table.csv?s=PFE&a=00&b=4&c=1982&d=00&e=10&f=2010&g=d&ignore=.csv].
 
<syntaxhighlight lang="rlab">
<lang RLaB>
// get cvs data from Yahoo for Pfeizer (PFE)
url="http://ichart.finance.yahoo.com/table.csv?s=PFE&a=00&b=4&c=1982&d=00&e=10&f=2010&g=d&ignore=.csv";
Line 1,913 ⟶ 2,527:
x = readm(url);
close (url);
</syntaxhighlight>
</lang>
 
=={{header|Ruby}}==
The simple way loads the entire content into memory, then prints it.
 
<langsyntaxhighlight lang="ruby">
require 'open-uri'
 
print open("http://rosettacode.org") {|f| f.read}
</syntaxhighlight>
</lang>
 
If the content might be large, the better way uses FileUtils.copy_stream.
 
<langsyntaxhighlight lang="ruby">
require 'fileutils'
require 'open-uri'
 
open("http://rosettacode.org/") {|f| FileUtils.copy_stream(f, $stdout)}
</syntaxhighlight>
</lang>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">print httpget$("http://rosettacode.org/wiki/Main_Page")</langsyntaxhighlight>
 
=={{header|Rust}}==
Cargo.toml
<langsyntaxhighlight lang="toml">
[dependencies]
hyper = "0.6"
</syntaxhighlight>
</lang>
src/main.rs
<langsyntaxhighlight lang="rust">
//cargo-deps: hyper="0.6"
// The above line can be used with cargo-script which makes cargo's dependency handling more convenient for small programs
Line 1,958 ⟶ 2,572:
println!("{}", body);
}
</syntaxhighlight>
</lang>
 
=={{header|Scala}}==
{{libheader|Scala}}
<langsyntaxhighlight lang="scala">import scala.io.Source
 
object HttpTest extends App {
Line 1,968 ⟶ 2,582:
 
Source.fromURL("http://www.rosettacode.org").getLines.foreach(println)
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
{{works with|Guile}}
 
<langsyntaxhighlight lang="scheme">
; Use the regular expression module to parse the url (included with Guile)
(use-modules (ice-9 regex))
Line 2,000 ⟶ 2,614:
(do ((c (read-char s) (read-char s))) ((eof-object? c))
(display c)))
</syntaxhighlight>
</lang>
{{works with|Chicken Scheme}}
Using the [http://api.call-cc.org/doc/http-client http-client] library, this is trivial.
<langsyntaxhighlight lang="scheme">
(use http-client)
(print
(with-input-from-request "http://google.com/"
#f read-string))
</syntaxhighlight>
</lang>
 
=={{header|Seed7}}==
Line 2,015 ⟶ 2,629:
which gets data specified by an URL using the HTTP protocol.
 
<langsyntaxhighlight lang="seed7">
$ include "seed7_05.s7i";
include "gethttp.s7i";
Line 2,022 ⟶ 2,636:
begin
writeln(getHttp("www.rosettacode.org"));
end func;</langsyntaxhighlight>
 
=={{header|SenseTalk}}==
<langsyntaxhighlight lang="sensetalk">put url "http://www.rosettacode.org"</langsyntaxhighlight>
 
=={{header|Sidef}}==
Sidef can load and use Perl modules:
<syntaxhighlight lang ="ruby">func getrequire(url'HTTP::Tiny') {
 
var lwp = (
func get(url) {
try { require('LWP::UserAgent') }
static ua = %O<HTTP::Tiny>.new(agent => 'Mozilla/5.0')
catch { warn "'LWP::UserAgent' is not installed!"; return nil }
var resp = ua.get(url)
)
if (resp{:success}) {
var ua = lwp.new(agent => 'Mozilla/5.0')
if (var resp = ua.get(url);return resp{:content}.is_success) {decode_utf8
return resp.decoded_content
}
return nil
}
 
printsay get("http://rosettacode.org")</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
{{works with|Pharo}}
<langsyntaxhighlight lang="smalltalk">
Transcript show: 'http://rosettacode.org' asUrl retrieveContents contentStream.
</syntaxhighlight>
</lang>
 
=={{header|SNOBOL4}}==
{{works with|Macro SNOBOL4 in C}}
<langsyntaxhighlight lang="snobol">-include "tcp.sno"
tcp.open(.conn,'www.rosettacode.org','http') :s(cont1)
terminal = "cannot open" :(end)
Line 2,058 ⟶ 2,671:
tcp.close(.conn)
end
</syntaxhighlight>
</lang>
 
=={{header|Swift}}==
<langsyntaxhighlight Swiftlang="swift">import Foundation
 
let request = NSURLRequest(URL: NSURL(string: "http://rosettacode.org/")!)
Line 2,075 ⟶ 2,688:
}
 
CFRunLoopRun() // dispatch</langsyntaxhighlight>
 
=={{header|Tcl}}==
Note that the <code>http</code> package is distributed as part of Tcl.
 
<langsyntaxhighlight lang="tcl">
package require http
set request [http::geturl "http://www.rosettacode.org"]
puts [http::data $request]
http::cleanup $request</langsyntaxhighlight>
 
=={{header|TSE SAL}}==
<syntaxhighlight lang="tse sal">
<lang TSE SAL>DLL "<urlmon.dll>"
 
INTEGER PROC FNUrlGetSourceApiI(
DLL "<urlmon.dll>"
INTEGER lpunknown,
INTEGER PROC FNUrlGetSourceApiI(
STRING urlS : CSTRVAL,
INTEGER lpunknown,
STRING filenameS : CSTRVAL,
STRING urlS : CSTRVAL,
INTEGER dword,
STRING filenameS : CSTRVAL,
INTEGER tlpbindstatuscallback
INTEGER dword,
) : "URLDownloadToFileA"
INTEGER tlpbindstatuscallback
) : "URLDownloadToFileA"
END
 
// library: url: get: source <description></description> <version control></version control> <version>1.0.0.0.3</version> (filenamemacro=geturgso.s) [kn, ri, su, 13-04-2008 05:12:53]
PROC PROCUrlGetSource( STRING urlS, STRING filenameS )
FNUrlGetSourceApiI( 0, urlS, filenameS, 0, 0 )
END
 
PROC Main()
STRING s1[255] = "http://www.google.com/index.html"
STRING s2[255] = "c:\temp\ddd.txt"
IF ( NOT ( Ask( "url: get: source: urlS = ", s1, _EDIT_HISTORY_ ) ) AND ( Length( s1 ) > 0 ) ) RETURN() ENDIF
IF ( NOT ( AskFilename( "url: get: source: filenameS = ", s2, _DEFAULT_, _EDIT_HISTORY_ ) ) AND ( Length( s2 ) > 0 ) ) RETURN() ENDIF
RETURN()
ENDIF
IF ( NOT ( AskFilename( "url: get: source: filenameS = ", s2, _DEFAULT_, _EDIT_HISTORY_ ) ) AND ( Length( s2 ) > 0 ) )
RETURN()
ENDIF
PROCUrlGetSource( s1, s2 )
EditFile( s2 )
END</lang>
 
</syntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
SET DATEN = REQUEST ("http://www.rosettacode.org")
*{daten}
</syntaxhighlight>
</lang>
 
=={{header|UNIX Shell}}==
<langsyntaxhighlight lang="bash">curl -s -L http://rosettacode.org/</langsyntaxhighlight>
 
<langsyntaxhighlight lang="bash">lynx -source http://rosettacode.org/</langsyntaxhighlight>
 
<langsyntaxhighlight lang="bash">wget -O - -q http://rosettacode.org/</langsyntaxhighlight>
 
<langsyntaxhighlight lang="bash">lftp -c "cat http://rosettacode.org/"</langsyntaxhighlight>
 
{{works with|BSD}}
<langsyntaxhighlight lang="bash">ftp -o - http://rosettacode.org 2>/dev/null</langsyntaxhighlight>
 
=={{header|VBScript}}==
Line 2,136 ⟶ 2,751:
 
Based on code at [http://itknowledgeexchange.techtarget.com/vbscript-systems-administrator/how-to-retrieve-html-web-pages-with-vbscript-via-the-microsoftxmlhttp-object/ How to retrieve HTML web pages with VBScript via the Microsoft.XmlHttp object]
<syntaxhighlight lang="vb">
<lang vb>
Option Explicit
 
Line 2,154 ⟶ 2,769:
 
Set oHTTP = Nothing
</syntaxhighlight>
</lang>
 
=={{header|Visual Basic}}==
Line 2,163 ⟶ 2,778:
{{works with|VBA|6.5}}
{{works with|VBA|7.1}}
<langsyntaxhighlight lang="vb">Sub Main()
Dim HttpReq As WinHttp.WinHttpRequest
' in the "references" dialog of the IDE, check
Line 2,177 ⟶ 2,792:
HttpReq.Send
Debug.Print HttpReq.ResponseText
End Sub</langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
<langsyntaxhighlight lang="vbnet">
Imports System.Net
 
Line 2,186 ⟶ 2,801:
Dim content As String = client.DownloadString("http://www.google.com")
Console.WriteLine(content)
</syntaxhighlight>
</lang>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="Vlang">
import net.http
 
fn main() {
resp := http.get("http://rosettacode.org/robots.txt") or {println(err) exit(-1)}
println(resp.body.str())
}
</syntaxhighlight>
 
=={{header|Wren}}==
{{trans|C}}
{{libheader|libcurl}}
An embedded program so we can ask the C host to communicate with libcurl for us.
<syntaxhighlight lang="wren">/* HTTP.wren */
 
var CURLOPT_URL = 10002
var CURLOPT_FOLLOWLOCATION = 52
var CURLOPT_ERRORBUFFER = 10010
 
foreign class Curl {
construct easyInit() {}
 
foreign easySetOpt(opt, param)
 
foreign easyPerform()
 
foreign easyCleanup()
}
 
var curl = Curl.easyInit()
if (curl == 0) {
System.print("Error initializing cURL.")
return
}
curl.easySetOpt(CURLOPT_URL, "http://www.rosettacode.org/")
curl.easySetOpt(CURLOPT_FOLLOWLOCATION, 1)
curl.easySetOpt(CURLOPT_ERRORBUFFER, 0) // buffer to be supplied by C
 
var status = curl.easyPerform()
if (status != 0) {
System.print("Failed to perform task.")
return
}
curl.easyCleanup()</syntaxhighlight>
<br>
We now embed this in the following C program, compile and run it.
<syntaxhighlight lang="c">/* gcc HTTP.c -o HTTP -lcurl -lwren -lm */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "wren.h"
 
/* C <=> Wren interface functions */
 
void C_curlAllocate(WrenVM* vm) {
CURL** pcurl = (CURL**)wrenSetSlotNewForeign(vm, 0, 0, sizeof(CURL*));
*pcurl = curl_easy_init();
}
 
void C_easyPerform(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
CURLcode cc = curl_easy_perform(curl);
wrenSetSlotDouble(vm, 0, (double)cc);
}
 
void C_easyCleanup(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
curl_easy_cleanup(curl);
}
 
void C_easySetOpt(WrenVM* vm) {
CURL* curl = *(CURL**)wrenGetSlotForeign(vm, 0);
CURLoption opt = (CURLoption)wrenGetSlotDouble(vm, 1);
if (opt < 10000) {
long lparam = (long)wrenGetSlotDouble(vm, 2);
curl_easy_setopt(curl, opt, lparam);
} else {
if (opt == CURLOPT_URL) {
const char *url = wrenGetSlotString(vm, 2);
curl_easy_setopt(curl, opt, url);
} else if (opt == CURLOPT_ERRORBUFFER) {
char buffer[CURL_ERROR_SIZE];
curl_easy_setopt(curl, opt, buffer);
}
}
}
 
WrenForeignClassMethods bindForeignClass(WrenVM* vm, const char* module, const char* className) {
WrenForeignClassMethods methods;
methods.allocate = NULL;
methods.finalize = NULL;
if (strcmp(module, "main") == 0) {
if (strcmp(className, "Curl") == 0) {
methods.allocate = C_curlAllocate;
}
}
return methods;
}
 
WrenForeignMethodFn bindForeignMethod(
WrenVM* vm,
const char* module,
const char* className,
bool isStatic,
const char* signature) {
if (strcmp(module, "main") == 0) {
if (strcmp(className, "Curl") == 0) {
if (!isStatic && strcmp(signature, "easySetOpt(_,_)") == 0) return C_easySetOpt;
if (!isStatic && strcmp(signature, "easyPerform()") == 0) return C_easyPerform;
if (!isStatic && strcmp(signature, "easyCleanup()") == 0) return C_easyCleanup;
}
}
return NULL;
}
 
static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}
 
void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
switch (errorType) {
case WREN_ERROR_COMPILE:
printf("[%s line %d] [Error] %s\n", module, line, msg);
break;
case WREN_ERROR_STACK_TRACE:
printf("[%s line %d] in %s\n", module, line, msg);
break;
case WREN_ERROR_RUNTIME:
printf("[Runtime Error] %s\n", msg);
break;
}
}
 
char *readFile(const char *fileName) {
FILE *f = fopen(fileName, "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
rewind(f);
char *script = malloc(fsize + 1);
fread(script, 1, fsize, f);
fclose(f);
script[fsize] = 0;
return script;
}
 
int main(int argc, char **argv) {
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
config.bindForeignClassFn = &bindForeignClass;
config.bindForeignMethodFn = &bindForeignMethod;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* fileName = "HTTP.wren";
char *script = readFile(fileName);
WrenInterpretResult result = wrenInterpret(vm, module, script);
switch (result) {
case WREN_RESULT_COMPILE_ERROR:
printf("Compile Error!\n");
break;
case WREN_RESULT_RUNTIME_ERROR:
printf("Runtime Error!\n");
break;
case WREN_RESULT_SUCCESS:
break;
}
wrenFreeVM(vm);
free(script);
return 0;
}</syntaxhighlight>
 
=={{header|X86-64 Assembly}}==
===UASM 5.52===
The same as the [[Sockets]] example, Just with a read method added...
<syntaxhighlight lang="asm">
option casemap:none
option literals:on
 
ifndef __SOCKET_CLASS__
__SOCKET_CLASS__ equ 1
if @Platform eq windows64
WSADATA struct
wVersion dw ?
wHighVersion dw ?
iMaxSockets dw ?
iMaxUdpDg dw ?
szDescription db 256 dup (?)
szSystemStatus db 128 dup (?)
lpVendorInfo dq ?
WSADATA ends
option dllimport:<kernel32>
ExitProcess proto :word
HeapAlloc proto :qword, :dword, :qword
HeapFree proto :qword, :dword, :qword
GetProcessHeap proto
option dllimport:<ws2_32>
WSAStartup proto :word, :qword
WSACleanup proto :qword
closesocket proto :dword
option dllimport:none
exit equ ExitProcess
close equ closesocket
elseif @Platform eq linux64
malloc proto SYSTEMV :qword
free proto SYSTEMV :qword
close proto SYSTEMV :dword
exit proto SYSTEMV :dword
endif
memset proto :qword, :dword, :dword
printf proto :qword, :vararg
strlen proto :qword
getaddrinfo proto :qword, :qword, :qword, :qword
gai_strerror proto :dword
send proto :dword, :qword, :qword, :dword
recv proto :dword, :qword, :qword, :dword
socket proto :dword, :dword, :dword
connect proto :dword, :qword, :dword
freeaddrinfo proto :qword
 
CLASS socket_class
CMETHOD conn
CMETHOD write
CMETHOD read
ENDMETHODS
if @Platform eq windows64
wsa WSADATA <?>
endif
sock dd 0
pai dq 0
hostname dq ?
port dq ?
ENDCLASS
 
METHOD socket_class, Init, <VOIDARG>, <>, h:qword, p:qword
mov rbx, thisPtr
assume rbx:ptr socket_class
mov rax, h
mov [rbx].hostname, rax
mov rax, p
mov [rbx].port, rax
mov rax, rbx
assume rbx:nothing
ret
ENDMETHOD
 
METHOD socket_class, conn, <dword>, <>
local ht:qword
 
mov rbx, thisPtr
assume rbx:ptr socket_class
invoke printf, CSTR("--> Attempting connection to %s on %s",10), [rbx].hostname ,[rbx].port
if @Platform eq windows64
invoke WSAStartup, 202h, addr [rbx].wsa
endif
invoke memset, ht, 0, 0x30 ;; sizeof(struct addrinfo)
mov rax, ht
mov dword ptr [rax], 0 ;; ai_flags
mov dword ptr [rax+4], AF_INET
mov dword ptr [rax+8], SOCK_STREAM
invoke getaddrinfo, [rbx].hostname, [rbx].port, ht, addr [rbx].pai
.if rax != 0
invoke gai_strerror, eax
invoke printf, CSTR("--> Gai_strerror returned: %s",10), rax
mov rax, -1
jmp _exit
.endif
mov rax, [rbx].pai
mov edx, dword ptr [rax + 0XC] ;; pai.ai_protocol
mov ecx, dword ptr [rax + 8] ;; pai.ai_socktype
mov eax, dword ptr [rax + 4] ;; pai.ai_family
invoke socket, eax, ecx, edx
.if rax == -1
mov rax, -1
jmp _exit
.endif
mov [rbx].sock, eax
invoke printf, CSTR("--> Socket created as: %d",10), [rbx].sock
mov rax, [rbx].pai
mov edx, dword ptr [rax + 0x10] ;; pai.ai_addrlen
mov rcx, qword ptr [rax + 0x18] ;; pai.ai_addr
invoke connect, [rbx].sock, rcx, edx
.if rax == -1
invoke printf, CSTR("--> connect failed.. %i",10), rax
mov rax, -1
jmp _exit
.endif
mov rax, 0
 
_exit:
assume rbx:nothing
ret
ENDMETHOD
 
METHOD socket_class, write, <dword>, <>, b:qword
local tmp:qword
mov rbx, thisPtr
assume rbx:ptr socket_class
mov rax, b
mov tmp, rax
invoke strlen, tmp
mov rdx, rax
invoke send, [rbx].sock, tmp, rdx, 0
.if eax == -1
invoke printf, CSTR("--> Error in send..%d",10), rax
ret
.endif
assume rbx:nothing
ret
ENDMETHOD
 
METHOD socket_class, read, <VOIDARG>, <>, b:qword
local tmp:qword
 
mov rbx, thisPtr
assume rbx:ptr socket_class
mov rax, b
mov tmp, rax
invoke recv, [rbx].sock, tmp,MAX_READ_BYTES, 0
push rax
mov rax, tmp
mov b, rax
pop rax
invoke printf, CSTR("--> recv called, got %d bytes..",10), rax
assume rbx:nothing
ret
ENDMETHOD
 
METHOD socket_class, Destroy, <VOIDARG>, <>
mov rbx, thisPtr
assume rbx:ptr socket_class
invoke close, [rbx].sock
if @Platform eq windows64
invoke WSACleanup, addr [rbx].wsa
endif
.if [rbx].pai != 0
invoke freeaddrinfo, [rbx].pai
.endif
assume rbx:nothing
ret
ENDMETHOD
endif ;; __SOCKET_CLASS__
 
MAX_READ_BYTES equ 4023
 
.code
main proc
local lpSocket:ptr socket_class
local buffer:qword
 
mov lpSocket, _NEW(socket_class, CSTR("www.google.com"), CSTR("80"))
lpSocket->conn()
.if rax == -1
invoke exit, 0
ret
.endif
invoke printf, CSTR("-> Connected, sending data.",10)
lpSocket->write(CSTR("GET / HTTP 1.0",13,10,"Accept: text/html",13,10,13,10))
MEMALLOC(MAX_READ_BYTES)
mov buffer, rax
lpSocket->read(buffer)
invoke printf, CSTR("%s"), buffer
MEMFREE(buffer)
_DELETE(lpSocket)
invoke exit, 0
ret
main endp
 
end
</syntaxhighlight>
 
=={{header|zkl}}==
File htmlGet.zkl. This uses HTTP/1.0 Protocol to avoid chunked data. Or use cURL (see https example).
<langsyntaxhighlight lang="zkl">url := ask(0,"URL: ");
 
host := url;
Line 2,203 ⟶ 3,200:
server.write(get);
data := server.read(True);
println(data.text);</langsyntaxhighlight>
zkl htmlGet.zkl rosettacode.org/wiki/HTTP
{{out}}
Line 2,239 ⟶ 3,236:
 
=={{header|Zoea}}==
<syntaxhighlight lang="zoea">
<lang Zoea>
program: http
input: 'https://zoea.co.uk/examples/test.txt'
output: 'hello from zoea'
</syntaxhighlight>
</lang>
 
=={{header|Zoea Visual}}==
[http://zoea.co.uk/examples/zv-rc/Http.png HTTP]
 
=={{header|Zsh}}==
<langsyntaxhighlight lang="zsh">
zmodload zsh/net/tcp
ztcp wwwexample.w3.orgcom 80
fd=$REPLY
print -l -u $fd -- 'GET / HTTP/1.1' 'Host: wwwexample.w3.orgcom' ''
while read -u $fd -r -e -t 1; do; :; done
ztcp -c $fd
</syntaxhighlight>
</lang>
 
{{omit from|Applesoft BASIC|No TCP/IP network support on Apple II}}
{{omit from|Brainf***}}
{{omit from|Commodore BASIC|Does not have network access}}
{{omit from|EasyLang|Has no internet functions}}
{{omit from|Inform 7|Does not have network access.}}
{{omit from|Integer BASIC|No TCP/IP network support on Apple II}}
{{omit from|Locomotive Basic|Does not have network access.}}
{{omit from|Lotus 123 Macro Scripting}}
{{omit from|M4}}
{{omit from|Maxima}}
{{omit from|ML/I}}
{{omit from|Openscad}}
{{omit from|PARI/GP}}
{{omit from|PostScript}}
{{omit from|Retro|Does not have network access.}}
{{omit from|SQL PL|Does not have network access}}
{{omit from|TI-83 BASIC|Does not have network access.}}
{{omit from|TI-89 BASIC|Does not have network access.}}
{{omit from|Unlambda|Does not have network access.}}
{{omit from|Yorick|Does not have network access.}}
{{omit from|ZX Spectrum Basic|Does not have network access.}}
9,482

edits