<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>proxy | www.valeriofinazzo.it</title>
	<atom:link href="http://www.valeriofinazzo.it/wordpress/tag/proxy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.valeriofinazzo.it/wordpress</link>
	<description>Il sito dell&#039;ingegnere Valerio Finazzo</description>
	<lastBuildDate>Fri, 30 Oct 2020 16:39:33 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.7</generator>
	<item>
		<title>TUTORIAL GOLANG &#8211; ESEGUIRE CHIAMATE HTTP</title>
		<link>http://www.valeriofinazzo.it/wordpress/2020/09/tutorial-golang-eseguire-chiamate-http/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 27 Sep 2020 19:49:13 +0000</pubDate>
				<category><![CDATA[GOLANG]]></category>
		<category><![CDATA[certificato]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">http://www.valeriofinazzo.it/wordpress/?p=638</guid>

					<description><![CDATA[<p>L&#8217;articolo illustra come fare delle chiamate http tramite go. Il package che offre le funzioni per gestire il protocollo http si chiama &#8220;net/http&#8221;. Vediamo subito come gestire i principali casi d&#8217;uso. Per effettuare una GET si usa la funzione get, che restituisce un oggetto Response e un oggetto Error. Nell&#8217;esempio sto invocando la homepage di &#8230; <a href="http://www.valeriofinazzo.it/wordpress/2020/09/tutorial-golang-eseguire-chiamate-http/" class="more-link">Continua la lettura di <span class="screen-reader-text">TUTORIAL GOLANG &#8211; ESEGUIRE CHIAMATE HTTP</span> <span class="meta-nav">&#8594;</span></a></p>
The post <a href="http://www.valeriofinazzo.it/wordpress/2020/09/tutorial-golang-eseguire-chiamate-http/">TUTORIAL GOLANG – ESEGUIRE CHIAMATE HTTP</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></description>
										<content:encoded><![CDATA[<p>L&#8217;articolo illustra come fare delle chiamate http tramite go. Il package che offre le funzioni per gestire il protocollo http si chiama &#8220;net/http&#8221;. Vediamo subito come gestire i principali casi d&#8217;uso. </p>



<p>Per effettuare una GET si usa la funzione get, che restituisce un oggetto Response e  un oggetto Error.</p>



<pre class="crayon-plain-tag">response, err := http.Get(&quot;http://www.google.it&quot;)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()
	fmt.Println(&quot;Response status:&quot;, response.Status)
	body, err := ioutil.ReadAll(response.Body)
	fmt.Println(&quot;Response body:&quot;, string(body))</pre>



<p>Nell&#8217;esempio sto invocando la homepage di google, e verifico la presenza di errore e il codice restituito dalla risposta. Successivamente tramite  il package ioutil recupero il body della response e lo stampo  a video.</p>



<p>Se invece volessi inviare una post Golang mette a disposizione  2 funzioni: post e postForm. </p>



<p>La funzione post riceve in ingresso l&#8217;url cui inviare la post, il content type del dato che sto inviando e un reader del package io</p>



<pre class="crayon-plain-tag">response, err = http.Post(&quot;http://www.google.it&quot;, &quot;image/jpeg&quot;, bytes.NewBufferString(&quot;prova&quot;))
	if err != nil {
		panic(err)
	}
	fmt.Println(&quot;Response status:&quot;, response.Status)</pre>



<p>La funzione postForm invece riceve in ingresso l&#8217;url cui inviare la post e il form dei dati chiave, valore</p>



<p>Le 3 funzioni consentono di inviare get e post, ma qualora volessi usare altri metodi come la put o la delete occorre usare il metodo addNewRequest per creare una request e usare il client http per inviare la richiesta.</p>



<pre class="crayon-plain-tag">request, err := http.NewRequest(http.MethodDelete, &quot;http://www.google.it&quot;, bytes.NewBufferString(&quot;prova&quot;))
	if err != nil {
		panic(err)
	}
	client := &amp;amp;http.Client{}
	response, err = client.Do(request)
	if err != nil {
		panic(err)
	}
	fmt.Println(&quot;Response status:&quot;, response.Status)</pre>



<p>Per gestire le caratteristiche avanzate delle connessioni Go mette a disposizione l&#8217;oggetto Transport che opportunamente configurato consente di definire un proxy per l&#8217;invocazione del servizio. Questo caso si presenta quando il nostro client è presente all&#8217;interno di una rete il cui accesso ad internet è veicolato dalla presenza di un proxy.</p>



<pre class="crayon-plain-tag">proxyUrl, err := url.Parse(&quot;http://user:password@127.0.0.1:3128&quot;)
	if err != nil {
		panic(err)
	}
	tr := &amp;amp;http.Transport{
		MaxIdleConns:       10,
		IdleConnTimeout:    30 * time.Second,
		DisableCompression: true,
		Proxy:              http.ProxyURL(proxyUrl),
	}
	client = &amp;amp;http.Client{Transport: tr}
	response, err = client.Do(request)
	if err != nil {
		panic(err)
	}
	fmt.Println(&quot;Response status:&quot;, response.Status)</pre>



<p>Qualora invece il nostro server voglia un certificato occorre caricare il certificato e configurato sempre nel transport affinchè venga usato in trasmissione</p>



<pre class="crayon-plain-tag">caCert, err := ioutil.ReadFile(&quot;miocertificato.crt&quot;)
	if err != nil {
		log.Fatal(err)
	}
	caCertPool := x509.NewCertPool()
	caCertPool.AppendCertsFromPEM(caCert)
	tr := &amp;amp;http.Transport{
		MaxIdleConns:       10,
		IdleConnTimeout:    30 * time.Second,
		DisableCompression: true,
		TLSClientConfig: &amp;amp;tls.Config{
			RootCAs: caCertPool,
		},
	}
	client = &amp;amp;http.Client{Transport: tr}</pre>



<p>Nell&#8217;esempio sto leggendo il certificato e lo sto configurando all&#8217;interno del transport per poi fornirlo al client.</p>



<p>Abbiamo quindi visto come invocare i vari metodi e come gestire una rete con proxy e una connessione crittografata con invio del certificato.</p>



<p>Alla prossima</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&amp;linkname=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&amp;linkname=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&amp;linkname=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&amp;linkname=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_google_gmail" href="https://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&amp;linkname=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" title="Gmail" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fwww.valeriofinazzo.it%2Fwordpress%2F2020%2F09%2Ftutorial-golang-eseguire-chiamate-http%2F&#038;title=TUTORIAL%20GOLANG%20%E2%80%93%20ESEGUIRE%20CHIAMATE%20HTTP" data-a2a-url="http://www.valeriofinazzo.it/wordpress/2020/09/tutorial-golang-eseguire-chiamate-http/" data-a2a-title="TUTORIAL GOLANG – ESEGUIRE CHIAMATE HTTP"></a></p>The post <a href="http://www.valeriofinazzo.it/wordpress/2020/09/tutorial-golang-eseguire-chiamate-http/">TUTORIAL GOLANG – ESEGUIRE CHIAMATE HTTP</a> first appeared on <a href="http://www.valeriofinazzo.it/wordpress">www.valeriofinazzo.it</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
