# URL validation in Ignition

**URL:** <https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164>\
**Category:** Ignition\
**Created:** [September 14, 2023, 3:28pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164 "2023-09-14T15:28:52Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:28pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/1 "2023-09-14T15:28:52Z")

</div>

Hi,

I am calling some endpoints using system.net.httppost method.  
It works for valid URLs.

I want to check if the URL is valid and available before calling the post method.  
Is there a way to validate a URL in ignition?  
Some googling around shows that I should install "requests" module for this and use Head method, check status codes to determine a valid URL.  
I am wondering if Ignition provides any inbuilt method /way to do this.  
I like to avoid installing extra modules if possible.  
Please let me know.

Thanks,  
Ajay

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 14, 2023, 3:31pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/2 "2023-09-14T15:31:02Z")

</div>

What version of Ignition are you using?

`system.net.httpClient` supports the HTTP HEAD method.

[https://docs.inductiveautomation.com/display/DOC81/system.net.httpClient](https://docs.inductiveautomation.com/display/DOC81/system.net.httpClient)

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:40pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/3 "2023-09-14T15:40:58Z")

</div>

I am using v8.0

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 14, 2023, 3:42pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/4 "2023-09-14T15:42:07Z")

</div>

It exists in 8.0 as well.

I have to ask though... what's the point of making a whole extra HTTP request that might fail? Why not just make the POST? What if the server doesn't implement HEAD?

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:46pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/5 "2023-09-14T15:46:00Z")

</div>

That's a very good point.  
Honestly I don't know what is the best way to validate a url to make sure it is available.  
We are trying to know whether the API is available. In case not(server down or communication issue), then update the transaction status accordingly, the transaction that we are trying to post.

If you could suggest good ways to achieve this, that would be awesome.

Thanks,  
Ajay

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 14, 2023, 3:46pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/6 "2023-09-14T15:46:48Z")

</div>

Just call it. It will fail if it's not available. You don't need an extra call before it that also might fail for totally unrelated reasons.

---

<div class="post-metadata">

**Author:** ![grietveld](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/grietveld/32/6984_2.png) [@grietveld](https://forum.inductiveautomation.com/u/grietveld)\
**Post date:** [September 14, 2023, 3:50pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/7 "2023-09-14T15:50:26Z")

</div>

If you are using httpClient, there is a response function isGood() in the documentation. We basically will use that as our initial error handling and respond as needed if the response fails or returns an error.

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:50pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/8 "2023-09-14T15:50:47Z")

</div>

That is what I am doing now.  
I am using system.net.httppost method which does not return status code.  
Is there a way to get the status codes in the response?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 14, 2023, 3:52pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/9 "2023-09-14T15:52:19Z")

</div>

Use `system.net.httpClient` instead.

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:53pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/10 "2023-09-14T15:53:06Z")

</div>

I am using system.net.httppost method

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 14, 2023, 3:54pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/11 "2023-09-14T15:54:03Z")

</div>

Ok.  
Thank you!!

---

<div class="post-metadata">

**Author:** ![Ajay\_Gupta](https://avatars.discourse-cdn.com/v4/letter/a/f05b48/32.png) [@Ajay\_Gupta](https://forum.inductiveautomation.com/u/Ajay_Gupta)\
**Post date:** [September 19, 2023, 2:43pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/12 "2023-09-19T14:43:19Z")

</div>

@Kevin.Herron So, I used httpClient. It works fine.  
But I am facing a situation mentioned below-  
When i call the function which is using httpClient to invoke the endpoint from Script Console, it works absolutely fine. I get what i expect.  
But when i call the same function from a gateway timer script, a get a 403 error.  
I am not sure why this could happen.  
I am using Basic Authentication passing username and password.  
Could you please help me on this?

Thanks,  
Ajay

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 19, 2023, 2:51pm UTC](https://forum.inductiveautomation.com/t/url-validation-in-ignition/79164/13 "2023-09-19T14:51:05Z")

</div>

The only difference is that when you execute in the script console the HTTP call is made from the computer running in the Designer, and when you execute in a gateway timer script the call is made from the server running the Ignition Gateway.

Unless you've made a coding mistake that results in the wrong credentials being used, then you need to look external to Ignition - OS security, a proxy, a firewall, or some other network appliance interfering with the call. Work with your IT team.
