TCurlClient doesn't check for HTTP status code. Other languages, such as Go and Java do check for it. This can lead to potentially wrong exception being thrown: TProtocolException instead of TTransportException. To be more precise, TCurlTransport doesn't error out and Protocol starts to parse response, which may lead to TProtocolException. For example, AWS ALB may return 502 Bad Gateway with HTML as part of payload when there's an issue with an upstream. In such case, a client may want to retry but it only makes sense if there's a transport exception.