[go-nuts] Re: net/http and errors.

2016-12-01 Thread mb . dhananjay


> if err, ok := err.(*url.Error); ok {
> if err, ok := err.Err.(*net.OpError); ok {
> if err, ok := err.Err.(*net.DNSError); ok {
> fmt.Println("DNS ERROR:", err)
> }
> }
> }
>

This works as expected. :-)

On Monday, November 28, 2016 at 9:32:55 PM UTC+1, Dave Cheney wrote:
>
> Indeed. Does your program differentiate between a URL not resolving, the 
> webserver at the other end being down or refusing to connect, or it 
> returnining a non temporary fatal error, 4xx? 


Yes, it tries to be verbose about failure reasons. DNS / Server not 
listening / HTTP Status codes if present.. 

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[go-nuts] Re: net/http and errors.

2016-11-28 Thread mb . dhananjay
I'm downloading a large number of urls and the result is expected to have 
failure reasons, DNS lookup failed being one.

calling lookup manually would solve my issue, I suppose. Just wanted to 
make sure that I'm not missing any obvious solutions.

1. lookup DNS and if it succeeds, 
2. try http.Get - which calles Lookup again (also maybe DNS server went 
down now - improbable but not impossible?)


On Monday, November 28, 2016 at 1:05:25 PM UTC+1, Dave Cheney wrote:
>
> What specifically do you want to handle about DNS errors ?
>
> If you have a set of possible dns names and you don't know if some of them 
> are valid, you could use net.LookupHost to check which ones are valid 
> before calling http.Get.
>
> On Monday, 28 November 2016 22:44:37 UTC+11, mb.dha...@gmail.com wrote:
>>
>> But AFIU, err.Temporary() could be true for other kind of errors that 
>> might happen, isn't that a problem if I only want to handle DNS errors?
>>
>>
>> On Friday, November 25, 2016 at 6:35:59 PM UTC+1, Victor Vrantchan wrote:
>>>
>>> In Go, you can check if a type satisfies a particular behavior by 
>>> declaring an interface, and then checking if the type satisfies that 
>>> interface. 
>>> In your case, you can check if the error is `Temporrary()` or not. 
>>>
>>> See this snippet as an example: https://I don't 
>>> thinplay.golang.org/p/Ffyg61iDpB 
>>>
>>> I recommend 
>>> https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully
>>>  
>>> and.or the GopherCon talk https://www.youtube.com/watch?v=lsBF58Q-DnY 
>>> by Dave Cheney for a more in-depth presentation of this idea. 
>>>
>>> On Friday, November 25, 2016 at 12:00:06 PM UTC-5, mb.dha...@gmail.com 
>>> wrote:

 This is a question about the net/http API, Googling was not very 
 helpful.

 _, err := http.Get("https://random_non_existing_domain.com;)


 Following code will obviously fail, but how can I check if it failed 
 because of DNS error not because a billion other things that might have 
 gone wrong?

 I tried this, (mostly as a shot in the dark)

 if e, ok := err.(net.Error); ok {
 fmt.Println("dial error", e.Temporary())
 }
 if e, ok := err.(*net.AddrError); ok {
 fmt.Println("addr rror", e.Temporary())
 }
 if e, ok := err.(*net.DNSError); ok {
 fmt.Println(e)

 and it seems to print 

dial error false

 Is there any easy way to do what I'm trying to achieve?

 -
 dbalan
 @notmycommit




-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[go-nuts] Re: net/http and errors.

2016-11-28 Thread mb . dhananjay
But AFIU, err.Temporary() could be true for other kind of errors that might 
happen, isn't that a problem if I only want to handle DNS errors?


On Friday, November 25, 2016 at 6:35:59 PM UTC+1, Victor Vrantchan wrote:
>
> In Go, you can check if a type satisfies a particular behavior by 
> declaring an interface, and then checking if the type satisfies that 
> interface. 
> In your case, you can check if the error is `Temporrary()` or not. 
>
> See this snippet as an example: https://I don't 
> thinplay.golang.org/p/Ffyg61iDpB 
>
> I recommend 
> https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully
>  
> and.or the GopherCon talk https://www.youtube.com/watch?v=lsBF58Q-DnY by 
> Dave Cheney for a more in-depth presentation of this idea. 
>
> On Friday, November 25, 2016 at 12:00:06 PM UTC-5, mb.dha...@gmail.com 
> wrote:
>>
>> This is a question about the net/http API, Googling was not very helpful.
>>
>> _, err := http.Get("https://random_non_existing_domain.com;)
>>
>>
>> Following code will obviously fail, but how can I check if it failed 
>> because of DNS error not because a billion other things that might have 
>> gone wrong?
>>
>> I tried this, (mostly as a shot in the dark)
>>
>> if e, ok := err.(net.Error); ok {
>> fmt.Println("dial error", e.Temporary())
>> }
>> if e, ok := err.(*net.AddrError); ok {
>> fmt.Println("addr rror", e.Temporary())
>> }
>> if e, ok := err.(*net.DNSError); ok {
>> fmt.Println(e)
>>
>> and it seems to print 
>>
>>dial error false
>>
>> Is there any easy way to do what I'm trying to achieve?
>>
>> -
>> dbalan
>> @notmycommit
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[go-nuts] net/http and errors.

2016-11-25 Thread mb . dhananjay
This is a question about the net/http API, Googling was not very helpful.

_, err := http.Get("https://random_non_existing_domain.com;)


Following code will obviously fail, but how can I check if it failed 
because of DNS error not because a billion other things that might have 
gone wrong?

I tried this, (mostly as a shot in the dark)

if e, ok := err.(net.Error); ok {
fmt.Println("dial error", e.Temporary())
}
if e, ok := err.(*net.AddrError); ok {
fmt.Println("addr rror", e.Temporary())
}
if e, ok := err.(*net.DNSError); ok {
fmt.Println(e)

and it seems to print 

   dial error false

Is there any easy way to do what I'm trying to achieve?

-
dbalan
@notmycommit


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.