Why isn't connection didFailWithError not called? - ios

I am sending a request to my server, and receiving a status code of 500
Why instead of calling connectionDidFailWithError the system is calling connectionDidFinishLoading
both methods have implementations in my class delegate

HTTP status code errors are not considered connection errors. If you get a 500, the HTTP connection did not encounter any error. It received a legitimate response: a 500 status code. didFailWithError: is for things like a "connection refused" error. You can find a comprehensive list of NSURLErrorDomain and CFNetworkErrors errors here.
According to this blog post, NSURLConnection class was originally written for the first release of Safari in 2003 and the original goals for NSURLConnection still show in its API design:
A web browser does not need to distinguish between HTTP status codes.
Regardless whether the response’s status code is 200, 404 or 500, the
browser can always get away with displaying the response body.
Consequently, NSURLConnection reports a 404 response as success. In
contrast, a web service client needs to handle a 4xx or 5xx response
as an error.

Related

Twilio MMS wont send video. I keep getting error Error - 11200

I am linking this file for my media URL:
my goal is for this to be sent as a MMS. I first had a file size error. I fixed that, now I am stuck with this error.
The video will play on my browser. But not on my phone, but it will play on my laptop.
Does anyone have any ideas what I might be doing wrong?
HTTP retrieval failure: Attempt to retrieve media failed. Possible
Causes Web server returned a 4xx or 5xx HTTP response to Twilio
Misconfigured Web Server Network disruptions between Twilio and your
web server No Content-Type header attached to response Content-Type
doesn't match actual content, e.g. an MP3 file that is being served
with Content-Type: audio/x-wav, instead of Content-Type: audio/mpeg
Possible Solutions Double check that your TwiML URL does not return a
4xx or 5xx error Make certain that the URL does not perform a 302
redirect to an invalid URL Confirm the URL requested is not protected
by HTTP Auth Make sure your web server allows HTTP POST requests to
static resources (if the URL refers to .xml or .html files) Verify
your web server is up and responsive Check to see that the URL host is
not a private or local IP address Verify the ping times and packet
loss between your web server and www.twilio.com
Error Description There was a failure attempting to retrieve the
contents of this URL. An 11200 error is an indicator of a connection
failure between Twilio and your service. When Twilio requests a page
from your server, we wait a maximum of 15 seconds for a response. A
connection failure will occur if no response is returned in that time.
There are many reasons a connection timeout can occur; common causes
are long running database queries or outside processes and calls to
external systems taking a long time to return. It may be possible your
application experienced one of these issues. If you are encountering
this error only intermittently, it is possible that your web server
was temporarily unavailable or experiencing a network outage. 502 Bad
Gateway errors If your debugger is reporting a 502 Bad Gateway error,
this may mean that Twilio's internal server had trouble retrieving
content from your website. Your request must contain a Content-Type
that is valid. Twilio may also have had problems resolving your DNS
name to an IP address, or issues with the network connection. Check
that your web server is started, and is available over the public
Internet.
Request Inspector
+ Expand All
GET https://meetlete.com/media/small-met.mp4 2021-02-21 05:05:07 UTC404 Request URL Parameters Message TextShow Raw
Msg "Attempt to retrieve media failed."
httpResponse "404"
EmailNotification "false"
url "https://meetlete.com/media/small-met.mp4"
LogLevel "ERROR"
Twilio developer evangelist here.
It might be the case that Twilio cached a 404 response to your video at some point. I just tried sending a media message using your URL and it was processed correctly and the video was ingested by Twilio.
I would advise you try again. If you still find that your account has cached the URL response, you could try moving the video to a different address and trying with that instead.

Frequent timeout errors when returning message to twilio from Microsoft Bot Framework

I've been running into some issues with the twilio and bot framework channel integration.
In a nutshell, a large number of incoming messages and conversations that happen through the twilio channel time out and the user never receives a response. Then, after a few minutes, all the piled up responses will arrive at the same time - almost as iff the responder hangs and then continues. The error occurs only with the twilio channel - the bot it working perfectly when embedded in site, when tested in azure portal, and when connected to slack.
When I first connected twilio to the bot, it was running completely fine for a few days, and now I am getting the following error on roughly 70-80% of the messages which occur through that channel.
On a high level, the error I'm getting specific to the channel is: 'There was an error sending this message to your bot: HTTP status code GatewayTimeout'
Inside of the app logs, the error recording is far more detailed, but still provides no insight into what specifically is causing the error:
HTTP Error 500.1013 - Internal Server Error
The page cannot be displayed because an internal server error has occurred.
Most likely causes:
•IIS received the request; however, an internal error occurred during the processing of the request. The root cause of this error depends on which module handles the request and what was happening in the worker process when this error occurred.
•IIS was not able to access the web.config file for the Web site or application. This can occur if the NTFS permissions are set incorrectly.
•IIS was not able to process configuration for the Web site or application.
•The authenticated user does not have permission to use this DLL.
•The request is mapped to a managed handler but the .NET Extensibility Feature is not installed.
Things you can try:
•Ensure that the NTFS permissions for the web.config file are correct and allow access to the Web server's machine account.
•Check the event logs to see if any additional information was logged.
•Verify the permissions for the DLL.
•Install the .NET Extensibility feature if the request is mapped to a managed handler.
•Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click here.
On the twilio side, I get the following error
Error - 11200
HTTP retrieval failure
Possible Causes
Web server returned a 4xx or 5xx HTTP response to Twilio
Misconfigured Web Server
Network disruptions between Twilio and your web server
No Content-Type header attached to response
Content-Type doesn't match actual content, e.g. an MP3 file that is being served with Content-Type: audio/x-wav, instead of Content-Type: audio/mpeg
Possible Solutions
Double check that your TwiML URL does not return a 4xx or 5xx error
Make certain that the URL does not perform a 302 redirect to an invalid URL
Confirm the URL requested is not protected by HTTP Auth
Make sure your web server allows HTTP POST requests to static resources (if the URL refers to .xml or .html files)
Verify your web server is up and responsive
Check to see that the URL host is not a private or local IP address
Verify the ping times and packet loss between your web server and www.twilio.com
Twilio sends a request to Bot Framework, and gets the following info back
Msg "Bad Gateway"
sourceComponent "14100"
ErrorCode "11200"
EmailNotification "false"
httpResponse "502"
LogLevel "ERROR"
url "https://sms.botframework.com/api/sms"
Twilio was unable to fetch content from: http://sms.botframework.com/api/sms
Error: Total timeout is triggered. Configured tt is 15000ms and we attempted 1 time(s)
Account SID: redacted
SID: redacted
Request ID: redacted
Remote Host: sms.botframework.com
Request Method: POST
Request URI: http://sms.botframework.com/api/sms
URL Fragment: true
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Some additional information:
Bot is working perfectly when embedded in website, when tested in the azure portal, and when connected to slack.
Error seems to occur at the locations in code where await context.sendActivity(messageToReturnToUser) or await dialogContext.beginDialog(this.id) or basically anywhere where we send something back to the user.
After a few minutes, bot framework will send all the piled up messages to the end user and they'll get a chunk of sms messages back to back.
Error cannot be replicated in any other channel or in the bot framework emulator.
Error does not occur with every message. An arbitrary number of messages will go through fine and get responses immediately, but then an arbitrary number of messages will be subject to the delays.
I am using paid twilio numbers, no trial errors happening here!
Has anyone else had this problem? Any input or help would be appreciated!
This issue has been mitigated on the Azure/BotFramework side. If you are still having issues, please let me know.

Get HTTP Status-Line in Alamofire

I am using the Alamofire 4.0.1 library in swift 3; I am looking for the HTTP Status-Line (as described in https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html). I can get the status code, the headers, everything, but not the status message.
I am querying a REST API which gives me 403 responses with different messages after the "Forbidden" keyword describing the problem: like the client is not approved for access or that accessing an specific URL is not allowed, because it is for internal use only. In my client accessing the API I want to give the user more details than just the "Forbidden" message.
This is what the server sends back (I know this because I used Paw, a HTTP Client to send a HTTP request and investigate the response):
HTTP/1.0 403 Forbidden (internal method)
So to conclude, is there any chance to get the HTTP Status-Line in Alamofire?
Unfortunately no
Alamofire uses the URLResponse and it does not implement any field/method that gives you information about Status-Line. To get the Status-Line you should use other maybe lower-level frameworks.
URLResponse gives you only information about allHeaderFields, you can look on my answer about it here :
https://stackoverflow.com/a/36524454/5433235

Which HTTP response code should I give my application to say that authentication was successful?

I have an API which validates a user and I don't know what to return to my iOS application when authentication is and isn't successful. I'm currently returning a 401 error for failed authentication, but how should I tell my iOS application that authentication was successful?
You could use an HTTP 200, which indicates the request was OK without problems. You could also potentially use 201 to indicate a new session has been created.
For explanations on HTTP status codes, please see Wikipedia's list of HTTP status codes

NSURLErrorDomain Code=-1012

I keep getting this error when I make a request to an api. The api requires authentication and for this I add valid OAuth token to the header of the request. When I do that I receive a 200 response so all is good.
But I want to test my code to handle a 401 response code. To do this I add a invalid OAuth token to the request. I was expecting the server to just send a 401 response code but instead I got an error from my callback. The error is NSURLErrorDomain Code=-1012, and after looking online it turns out this is a authentication error.
I was expecting the server to just send a 401 back? Instead I'm getting a error in my callback. Is there something wrong with my server or my request?
Thanks for the replies...
I think maybe you need to establish your NSURLConnection with a delegate to handle this the way you want to.
I was using charles proxy and that was the reason I saw this error. When I stopped using the proxy it worked like a charm.
P.s. I've not tested this with NSURLSession but if anyone is curious just add a comment! :)

Resources